美文网首页art
red 语言初体验

red 语言初体验

作者: ColdRomantic | 来源:发表于2017-10-05 01:38 被阅读803次

    我第一次听到 red 这门语言是在2017-07-20,是通过陈天的一篇关于 red 的文章。正好趁十一,闲得浮生几日,来入个门。下面步入正题:
    red 目前最新的版本是0.6.3 (2017-10-05)

    1 red 语言特性

    我们首先来看下 red 语言的一些特性:

    • 1 red 是一门编译型语言,不走虚拟机,直接编译成目标平台的,和 C 代码同级别性能的二进制。编译时可以直接跨平台往 windows / linux / osx 等 target OS,以及 x86 / arm 等 target CPU 上面编译。

    • 2 跨平台的本地GUI
      看上去像是一门后端的语言,竟然去抢前端的饭碗。而且,妄图支持 osx,windows,android,iOS,一统江湖。是的,就是这么性感。
      突然觉得,如果只想学一门语言,又想成为全栈工程师,red 刚刚好。

      native GUI
    • 3 red 类型树
      red 目前提供了大约50多种常用类型,而且能够赋值时自动识别类型。


      types tree
    • 4 程序小
      red 可执行程序只有1.1M左右,cool!

    2 尝试做个计算器

    光说不练假把式,我们来仿写一个 Apple 计算器。

    右边是要实现计算器的效果

    代码实现:

    Red [
        Title: "计算器"
        Author: "ForrestSu"
        Date: 2017-10-04
        Version: 1.0.0
        purpose: "模仿Apple计算器"
        File:    %applecalc.red
        Needs:   'View
    ]
    lite-gray: 220.220.220
    white-gray: 240.240.240
    
    ; 下面的值保存当前内存中的值
    value1: 0         ;上一次计算的结果
    value2: 0         ;正在输入的数
    last_op: "="      ;上一次按下的键
    is_point?: false ;标记是否已经输入过小数点 
    
    view [
        title "计算器"   ;视窗标题
        ; 从按键的外观和功能来分析,我把按键分为三类,分别是:
        ; * 数字键:十个数字和小数点
        ; * 计算键:加、减、乘、除、以及等号
        ; * 功能键:「C/AC」、「+/-」、「%」
        ; 为此三类我们定义了三个样式,分别是 num_btn,func_btn,op_btn 。num_btn,func_btn,op_btn 。
        style btn: base white-gray 60x50 font-size 16 draw [pen gray box 0x0 60x50]
        style num_btn: btn white-gray[
            ; 「C/AC」按键上面的文字会在 "AC" 和 "C" 之间切换:
            ; * AC 用来清除「当前状态」。
            ; * C 用来清除当前画面,使得画面显示0。
            ; 当数字键被按下之后,画面上有数字了,「C/AC」键就会显示「C」
            c_btn/text: "C"
            ; 小数点是否已经被按过
            either not is_point? [
              display/data: value2: value2 * 10 + load face/text
            ][
              append display/text face/text
              ;value2此时必须跟著画面一起更新
              value2: display/data
            ]
        ]
        ; func_btn 是功能键,继承自 btn,改变了颜色,但不定义共同的行为,
        ; 因为每个功能键的行为差异太大。
        style func_btn: btn lite-gray
        
        style op_btn: btn orange font-color white [
            value2: display/data
            value1: switch last_op [
                "÷" [ value1 * 1.0 / value2 ]
                "x" [ value1 * value2]
                "-" [ value1 - value2]
                "+" [ value1 + value2]
                "=" [ value2]
            ]
            if none? value1 [ value1: 0 ]
            ; 计算完了是否把 value2 清空 
            value2: 0
            is_point?: false
            last_op: face/text ;记录此次按下的符号
            display/data: value1
        ]
        origin 0x0
        space 0x0
        display: text gray 240x50 font-color white font-size 30 right data 0 
        return 
        c_btn: func_btn "AC" [
            either "AC" = face/text [
            ; 当上面的字样是”AC"时,表示要清除内存,把 is-point?、value1、op、value2
            ; 这四个值都恢复到原状。但因为出现 "AC" 表示已经出现过 "C",而处理"C" 的时候
            ; 会把 value2 和 is-point? 复原,所以这里只要复原 value1 和 op 即可。
               value1: 0
               last_op: "="
            ][
                display/data: 0
                value2: 0
                is_point?: false
                ; 按下"C"之后,上面的字样会变成"AC"
                face/text: "AC"
            ]
        ]
        func_btn "+/-" [
           ; 如果第一个字符是减号,就去除减号
            either #"-" = display/text/1 [
               remove display/text
            ][ insert display/text #"-" ]
        ]
        func_btn "%" [
            display/data: display/data / 100.0
        ]
        op_btn "÷" return 
        num_btn "7" num_btn "8" num_btn "9" op_btn "x" return
        num_btn "4" num_btn "5" num_btn "6" op_btn "-" return
        num_btn "1" num_btn "2" num_btn "3" op_btn "+" return
        num_btn "0" 120x50 draw [ pen gray box 0x0 120x50 ]
        num_btn "." [
            if not is_point? [
               append display/text "."
               is_point?: true
            ]
        ]
        op_btn "="
    ]
        
    

    代码去除注释大概80行左右,具体代码在这里就不详细解释了!
    Amazing, so sexy!
    最后编译成可执行程序:

    red -t Windows -o red\applecalc.exe red\applecalc.red

    最后生成exe可执行文件。(外加一个运行时库 libRedRt.dll)


    打包

    如果你也感兴趣,可以好好把玩。red 1.0,期待ing...

    相关文章

      网友评论

        本文标题:red 语言初体验

        本文链接:https://www.haomeiwen.com/subject/gvsjlxtx.html