趣文网,分享全网好句子、好文章!

(三语)一段代码让你Red语言快速入门——R1.3

时间:2023-11-20 02:20:01

相关推荐

(三语)一段代码让你Red语言快速入门——R1.3

* 本系列是“2+1”三语学编程系列,三语是英文、中文加计算机语言;即用英语来学习编程语言,并以中文为辅助;* 用英语来理解和学习计算机语言是最好的方式,这一系列的文章力求帮助大家在计算机语言上和英语阅读能力上都有所提升;* 推荐的阅读的方法是:先原文,适当看解析阅读,实在不行再看双语对照。* 解析中英语单词的音标使用Dictcom和IPA双音标标注,如果需要了解Dictcom音标,请参看我们的《dictionary.com所用的音标体系》一文。

Red语言是一门轻巧、便捷而又高效的编程语言,它非常吸引人的特性包括:

主程序只有一个文件,无需安装,但居然也能提供交互式环境编程,能够解释运行,也能够编译运行,并且还能够跨平台编译(甚至可以直接跨平台编译到Android系统);提供语言级上的、方便的原生图形化界面(GUI)编程能力,几句话就能搭建一个功能完整的图形界面,这是大多数其他主流语言都没有做到的;自嵌入脚本能力,Red编写的程序,自己就可以解释执行其他的Red代码,这对于编译型的语言来说一般是不具备的能力;自带的Parse子语言是正则表达式的一种替代方案,相对更加接近人类思维,能够实现的功能理论上也比正则表达式直接能做到的更多。

下面,我们就用一段代码来体会一下Red语言的基本编程,这段代码实现的功能很简单,就是统计一个文本文件中的文本行数。本文的主要目的,就是帮助具有一定其他语言编程基础的读者快速了解Red语言的特性并能够上手Red语言的基本编程。

在这之前,我们照例先从原文看看Red语言基本语法的一些说明:

Red is case insensitive, but there are few exceptions, the most relevant is that a program must begin with Red (not REd or red).

—— insensitive 形容词 [in-"sen-si-tiv][n"senstv] adj. 不敏感的—— exceptions 原型:exception 名词复数形式 [ik-"sep-shuhn][k"sepn] n. 例外—— relevant 形容词 ["rel-uh-vuhnt]["relvnt] adj. 相关的;切题的;有重大关系的;有意义的—— program 名词 ["proh-gram, -gruhm]["prɡrm] n. 程序

【解说】“case insensitive”是大小写不敏感的意思,所谓的大小写不敏感,是指Red程序代码中的所有变量、参数、函数等等文字,大小写都是一样的,例如print和Print或PRINT对于Red程序来说,都会认为是指同一个东西。当然,唯一需要记住的(目前)是,每一个Red代码的开头都要用“Red [”来开始,其中字母“R”必须大写,字母“ed”必须小写。

new-line characters are mostly ignored by Red interpreter.—— characters 原型:character 名词复数形式 ["kar-ik-ter]["krkt] n. 字符—— mostly 副词 ["mohst-lee]["mstli] adv. 通常—— ignored 原型:ignore 动词过去式 [ig-"nawr, -"nohr][ɡ"n] vt. 忽视;不理;不顾—— interpreter 名词 [in-"tur-pri-ter][n"tprt] n. [计算机]解释程序,解释器

【解说】“new-line characters”是指回车换行符,相当于Windows系统中的“rn”或Linux系统中的“n”等。换行符在Red语言代码中确实没什么用,理论上没有任何回车符也可以成为一段完整的代码,但加入回车换行符可以让代码看起来更清晰一些。

A relevant exception is a new-line inside a string.—— inside 介词、从属连词 [preposition in-"sahyd, "in-sahyd][n"sad] adj. 里面的 adv. 在里面 n. 内部 prep. 在 ... 里面—— string 名词 [string][str] n. 字串,字符串

【解说】如果自己定义的或者从其他地方读取的字符串内容中含有回车换行符,当然是另一回事了,这是不可以省略的。

A Red program is a long chain of "words".—— chain 名词 [cheyn][ten] n. 链;(一)连串

Basically, these words may be either "data" or "actions".—— Basically 原型:basically 副词 ["bey-sik-lee]["beskli] adv. 基本上;主要地—— data ["dey-tuh]["det] n. 数据;资料;是名词datum ["dey-tuhm]["detm] 的复数形式

【解说】Red中所说的data,相当于其他语言中的变量或对象等数据,action则对应于其他语言中的函数、方法等。

"words" are separated by one or more whitespaces .—— separated 原型:separate 动词过去分词 ["sep-uh-reyt]["seprt] adj. 分开的;单独的;各自的 v. 分开;隔开

—— whitespace [wats"pes] 空白;空白字符

【解说】“word”是Red语言中的重要概念,简单地理解,程序代码中所有东西都可以看成word,我们在这里不给它一个中文说法,就是为了让大家保持英语思维。Red代码可以看成一串连续的word组成的,其中以空白字符(whitespace)分割,空白字符可以是空格、Tab或者回车换行等。

Red keeps a dictionary with predefined words (built-in functions) and user-created words.—— predefined 过去分词做形容词 predefined [dih-"fahyn][prid"fand] adj. 预定义的;预先确定的—— built-in 形容词 ["bilt-in][blt n] adj. 内置的;嵌入的 n. 嵌入式;内置—— functions 原型:function 名词复数形式 ["fuhngk-shuhn]["fkn] n. 功能;函数

【解说】如同其他语言一样,Red语言中也有保留字(关键字),用Red语言的思维来说,就是预定义(predefined)的word。而开发者自己定义的变量、函数等就是用户创建(user-created)的word了。

说明一下,虽然Red语言中的正式概念是word,但是从大多数编程开发者的固有理解出发,我们在后面的解说中,还是会以变量、函数、对象等更通行的说法来代替Red中的word、data、action等概念。

"words" may be grouped into "blocks" by enclosing them with brackets.—— blocks 原型:block 名词复数形式 [blok][blk] n. 块;一组—— enclosing 原型:enclose 动词现在进行式或动名词 [en-"klohz][n"klz] vt. 圈起;围住—— brackets 原型:bracket 名词复数形式 ["brak-it]["brkt] n. 括号,这里指方括号

"Blocks" are not necessarily routines, they are just a group of words that may, or may not, be evaluated by an "action".—— necessarily 副词 [nes-uh-"sair-uh-lee, -"ser-][nes"serli] adv. 必然地;必定地;必需地—— routines 原型:routine 名词复数形式 [roo-"teen][ru"tin] n. 例行公事;常规—— evaluated 原型:evaluate 动词过去分词 [ih-"val-yoo-eyt]["vljuet] vt. 计算;评价;评估

【解说】也就是说,用方括号可以把一组word组合起来,成为其他语言中的数组、序列等概念;另外,Red的中的字符串也可以看作一个序列,多个字符串也可以用方括号括起来表示其他语言中连接字符串或者字符串相加的动作。

Every word has a datatype.—— datatype 名词 datatype [d"ttap] 数据类型

Red has a remarkably large number of datatypes.—— remarkably 副词 [ri-"mahr-kuh-buhl][r"mɑkbli] adv. 显著突出地;出乎意外地

【解说】Red语言中确实有很多数据类型,语言内置的类型就有好几十个,这也是它比较有特色的地方,很快我们就将看到了。

最后,在进入代码之前,我们再说明一点:Red语言中的注释是用英语分号“;”开始的,本代码中也加入了很多注释,以便帮助理解;在入门阶段,这些注释尤为重要,请一定要看懂。

Red [] ;所有Red程序代码必须以"Red["开始 ;方括号内以后可以写程序的一些属性,现在可以暂时空着argsT: system/options/args ; 获取命令行参数 ; Red中赋值使用冒号“:”而不是“=”prin ["^(line)命令行参数的类型是:" type? argsT] ; prin函数将在命令行输出信息 ; ^是转义字符,^(line)表示回车 ; 相当于其他语言中的转义字符n ; type? 用于获取后面变量的类型print [",长度是:" (length? argsT) ",具体内容是:"] ; print与prin的区别就是多输出一个换行字符 ; length?用于获取后面一个变量的大小 ; 这里获取的实际就是命令行参数的个数probe argsT ; probe函数用来显示变量的内容print ; 输出一个空行fileT: "" ; fileT用于存放文件(其实是文件名) ; Red中的file!文件型变量 ; 这里定义fileT是为了让它成为全局变量either (length? argsT) < 1 [ ; 如果没有命令行参数,则argsT的长度为0 fileT: request-file ; request-file将弹出一个图形化的文件选择框] [ fileT: to file! argsT/1 ; 将命令行参数的第1个转换为文件类型的变量 ; 原来的类型是字符串(string!) ; to 函数就是将后面的变量转换类型 ; 它后面第一个参数是将要转换成的类型 ; 第二个参数是与转换的变量] ; either是Red中的if...else... ; Red中的if语句不可以带else条件分支if fileT = none [ ; 注意判断相等是用单个等号 ; 与很多其他语言不同 ; 如果 print "没有选择任何文件" quit ; quit函数用于退出程序 ]print ["待处理的文件是:" (type? fileT) fileT] ; 如果担心block中的顺序问题,可以用圆括号括起来contentT: read/lines fileT ; read函数用于读取文件 ; 加上斜杠和lines,是Red中独有的“细化”(refinement)方式 ; 相当于给函数加一个参数 ; 这里加上/lines表示按行读取文本 ; 也就是读取到的文本内容将组成一个字符串数组print ["^/" "文件" to string! fileT "的总行数是:" to string! (length? contentT) ] ; ^/ 也是转义符,表示回车换行,与^(line)作用一样 ; 另外,从本行可以发现,Red语言代码中换行与否不重要

如果上面的代码显示效果容易看不太清楚,下面是该段代码在支持语法高亮的编辑器(VS Code)中的显示效果。

如果还没有安装Red语言的,可以参看我们《(三语)Red语言的安装与简单上手》一文来进行快速安装。

将这段代码保存为countLine.red文件,然后执行这段程序的结果如下图所示:

我们使用了命令行方式来执行它,暂时不触及图形界面。加入--cli参数是为了不弹出图形化的Red语言交互式环境(REPL),第二个参数是“D:redprjscountLinecountLine.red”,这对于我们的程序来说其实是第一个参数,表示我们要获取我们这个代码本身文件的文本行数,当然我们也可以换成其他文本文件的名字来获取其他文件的行数。

程序的输出我们都看到了,正确地得到了该文件的文本行数。至此,我们了解了Red语言的基本概念和编程方法,已经可以开始下一步更深入的学习了。

想了解更多精彩内容,快来关注陆满庭

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
显示评论内容(3)
  1. 梦悄悄2024-02-10 03:51梦悄悄[辽宁省网友]202.125.119.13
    @百合幽谷有了这份指南,我终于能够开始学习Red语言了,感觉很兴奋!
    顶0踩0
  2. 百合幽谷2024-01-13 19:21百合幽谷[台湾省网友]203.34.242.28
    R1.3版本的教程真的很清晰易懂,对初学者来说非常友好。
    顶0踩0
  3. 那思念2023-12-17 10:50那思念[台湾省网友]116.58.219.91
    这段代码教程真的很实用,让我能够快速入门Red语言,谢谢分享!
    顶1踩0
相关阅读
C语言趣味编程:使用while循环结构计算圆周率pi

C语言趣味编程:使用while循环结构计算圆周率pi

上篇文章已经讲了for循环的使用方法,详细请参考:这次通过一个计算圆周率pi的例子给大家介绍C语言中while循环结构的编程方法

2023-11-06

万字长文 一篇吃透WebSocket:概念 原理 易错常识 动手实践

万字长文 一篇吃透WebSocket:概念 原理 易错常识 动手实践

1、引言本文将从基本概念、技术原理、常见易错常识、动手实践等多个方面入手,万字长文,带你一起全方位探索 WebSocket 技术

2023-12-31

送你一个免费的python万国语言翻译器

送你一个免费的python万国语言翻译器

答案是,有!先就介绍一款非常好的,可以用python调用的翻译库,而且核心就是基于google翻译的

2024-01-04

变身抓重点小能手:机器学习中的文本摘要入门指南 | 资源

变身抓重点小能手:机器学习中的文本摘要入门指南 | 资源

如果你想在浩如烟海的互联网信息里寻找重点,一定想要快速排除多余的内容

2023-05-05