本系列是“2+1”三語學編程系列,三語是英文、中文加計算機語言;即用英語來學習編程語言,并以中文為輔助;
* 用英語來理解和學習計算機語言是最好的方式,這一系列的文章力求幫助大家在計算機語言上和英語閱讀能力上都有所提升;
* 推薦的閱讀的方法是:先原文,適當看解析閱讀,實在不行再看雙語對照。* 解析中英語單詞的音標使用Dictcom和IPA雙音標標注,如果需要了解Dictcom音標,請參看我們的《dictionary.com所用的音標體系》一文。
Red語言是一門輕巧、便捷而又高效的編程語言,它非常吸引人的特性包括:
下面,我們就用一段代碼來體會一下Red語言的基本編程,這段代碼實現(xiàn)的功能很簡單,就是統(tǒng)計一個文本文件中的文本行數(shù)。本文的主要目的,就是幫助具有一定其他語言編程基礎的讀者快速了解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'sens?t?v] adj. 不敏感的
—— exceptions 原型:exception 名詞復數(shù)形式 [ik-'sep-shuh?n][?k'sep?n] n. 例外
—— relevant 形容詞 ['rel-uh-vuhnt]['rel?v?nt] adj. 相關的;切題的;有重大關系的;有意義的
—— program 名詞 ['proh-gram, -gruh?m]['pr??ɡr?m] n. 程序
【解說】“case insensitive”是大小寫不敏感的意思,所謂的大小寫不敏感,是指Red程序代碼中的所有變量、參數(shù)、函數(shù)等等文字,大小寫都是一樣的,例如print和Print或PRINT對于Red程序來說,都會認為是指同一個東西。當然,唯一需要記住的(目前)是,每一個Red代碼的開頭都要用“Red [”來開始,其中字母“R”必須大寫,字母“ed”必須小寫。
new-line characters are mostly ignored by Red interpreter.
—— characters 原型:character 名詞復數(shù)形式 ['kar-ik-ter]['k?r?kt?] n. 字符
—— mostly 副詞 ['mohst-lee]['m??stli] adv. 通常
—— ignored 原型:ignore 動詞過去式 [ig-'nawr, -'nohr][?ɡ'n??] vt. 忽視;不理;不顧
—— interpreter 名詞 [in-'tur-pri-ter][?n't??pr?t?] n. [計算機]解釋程序,解釋器
【解說】“new-line characters”是指回車換行符,相當于Windows系統(tǒng)中的“\r\n”或Linux系統(tǒng)中的“\n”等。換行符在Red語言代碼中確實沒什么用,理論上沒有任何回車符也可以成為一段完整的代碼,但加入回車換行符可以讓代碼看起來更清晰一些。
A relevant exception is a new-line inside a string.
—— inside 介詞、從屬連詞 [preposition in-'sahyd, 'in-sahyd][??n'sa?d] adj. 里面的 adv. 在里面 n. 內部 prep. 在 ... 里面
—— string 名詞 [string][str??] n. 字串,字符串
【解說】如果自己定義的或者從其他地方讀取的字符串內容中含有回車換行符,當然是另一回事了,這是不可以省略的。
A Red program is a long chain of "words".
—— chain 名詞 [cheyn][t?e?n] n. 鏈;(一)連串
Basically, these words may be either "data" or "actions".
—— Basically 原型:basically 副詞 ['bey-sik-lee]['be?s?kli] adv. 基本上;主要地
—— data ['dey-tuh]['de?t?] n. 數(shù)據(jù);資料;是名詞datum ['dey-tuh?m]['de?t?m] 的復數(shù)形式
【解說】Red中所說的data,相當于其他語言中的變量或對象等數(shù)據(jù),action則對應于其他語言中的函數(shù)、方法等。
"words" are separated by one or more whitespaces .
—— separated 原型:separate 動詞過去分詞 ['sep-uh-reyt]['sep?r?t] adj. 分開的;單獨的;各自的 v. 分開;隔開
—— whitespace [wa?t?s'pe?s] 空白;空白字符
【解說】“word”是Red語言中的重要概念,簡單地理解,程序代碼中所有東西都可以看成word,我們在這里不給它一個中文說法,就是為了讓大家保持英語思維。Red代碼可以看成一串連續(xù)的word組成的,其中以空白字符(whitespace)分割,空白字符可以是空格、Tab或者回車換行等。
Red keeps a dictionary with predefined words (built-in functions) and user-created words.
—— predefined 過去分詞做形容詞 predefined [dih-'fahyn][pri?d?'fa?nd] adj. 預定義的;預先確定的
—— built-in 形容詞 ['bilt-in][b?lt ?n] adj. 內置的;嵌入的 n. 嵌入式;內置
—— functions 原型:function 名詞復數(shù)形式 ['fuhngk-shuh?n]['f??k?n] n. 功能;函數(shù)
【解說】如同其他語言一樣,Red語言中也有保留字(關鍵字),用Red語言的思維來說,就是預定義(predefined)的word。而開發(fā)者自己定義的變量、函數(shù)等就是用戶創(chuàng)建(user-created)的word了。
說明一下,雖然Red語言中的正式概念是word,但是從大多數(shù)編程開發(fā)者的固有理解出發(fā),我們在后面的解說中,還是會以變量、函數(shù)、對象等更通行的說法來代替Red中的word、data、action等概念。
"words" may be grouped into "blocks" by enclosing them with brackets.
—— blocks 原型:block 名詞復數(shù)形式 [blok][bl?k] n. 塊;一組
—— enclosing 原型:enclose 動詞現(xiàn)在進行式或動名詞 [en-'klohz][?n'kl??z] vt. 圈起;圍住
—— brackets 原型:bracket 名詞復數(shù)形式 ['brak-it]['br?k?t] 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?'ser?li] adv. 必然地;必定地;必需地
—— routines 原型:routine 名詞復數(shù)形式 [roo-'teen][ru?'ti?n] n. 例行公事;常規(guī)
—— evaluated 原型:evaluate 動詞過去分詞 [ih-'val-yoo-eyt][?'v?ljue?t] vt. 計算;評價;評估
【解說】也就是說,用方括號可以把一組word組合起來,成為其他語言中的數(shù)組、序列等概念;另外,Red的中的字符串也可以看作一個序列,多個字符串也可以用方括號括起來表示其他語言中連接字符串或者字符串相加的動作。
Every word has a datatype.
—— datatype 名詞 datatype [d?'t?ta?p] 數(shù)據(jù)類型
Red has a remarkably large number of datatypes.
—— remarkably 副詞 [ri-'mahr-kuh-buhl][r?'mɑ?k?bli] adv. 顯著突出地;出乎意外地
【解說】Red語言中確實有很多數(shù)據(jù)類型,語言內置的類型就有好幾十個,這也是它比較有特色的地方,很快我們就將看到了。
最后,在進入代碼之前,我們再說明一點:Red語言中的注釋是用英語分號“;”開始的,本代碼中也加入了很多注釋,以便幫助理解;在入門階段,這些注釋尤為重要,請一定要看懂。
Red []
;所有Red程序代碼必須以"Red["開始
;方括號內以后可以寫程序的一些屬性,現(xiàn)在可以暫時空著
argsT: system/options/args
; 獲取命令行參數(shù)
; Red中賦值使用冒號“:”而不是“=”
prin ["^(line)命令行參數(shù)的類型是:" type? argsT]
; prin函數(shù)將在命令行輸出信息
; ^是轉義字符,^(line)表示回車
; 相當于其他語言中的轉義字符\n
; type? 用于獲取后面變量的類型
print [",長度是:" (length? argsT) ",具體內容是:"]
; print與prin的區(qū)別就是多輸出一個換行字符
; length?用于獲取后面一個變量的大小
; 這里獲取的實際就是命令行參數(shù)的個數(shù)
probe argsT
; probe函數(shù)用來顯示變量的內容
print
; 輸出一個空行
fileT: ""
; fileT用于存放文件(其實是文件名)
; Red中的file!文件型變量
; 這里定義fileT是為了讓它成為全局變量
either (length? argsT) < 1 [
; 如果沒有命令行參數(shù),則argsT的長度為0
fileT: request-file
; request-file將彈出一個圖形化的文件選擇框
] [
fileT: to file! argsT/1
; 將命令行參數(shù)的第1個轉換為文件類型的變量
; 原來的類型是字符串(string!)
; to 函數(shù)就是將后面的變量轉換類型
; 它后面第一個參數(shù)是將要轉換成的類型
; 第二個參數(shù)是與轉換的變量
]
; either是Red中的if...else...
; Red中的if語句不可以帶else條件分支
if fileT = none [
; 注意判斷相等是用單個等號
; 與很多其他語言不同
; 如果
print "沒有選擇任何文件"
quit
; quit函數(shù)用于退出程序
]
print ["待處理的文件是:" (type? fileT) fileT]
; 如果擔心block中的順序問題,可以用圓括號括起來
contentT: read/lines fileT
; read函數(shù)用于讀取文件
; 加上斜杠和lines,是Red中獨有的“細化”(refinement)方式
; 相當于給函數(shù)加一個參數(shù)
; 這里加上/lines表示按行讀取文本
; 也就是讀取到的文本內容將組成一個字符串數(shù)組
print ["^/" "文件" to string! fileT "的總行數(shù)是:"
to string! (length? contentT) ]
; ^/ 也是轉義符,表示回車換行,與^(line)作用一樣
; 另外,從本行可以發(fā)現(xiàn),Red語言代碼中換行與否不重要
如果上面的代碼顯示效果容易看不太清楚,下面是該段代碼在支持語法高亮的編輯器(VS Code)中的顯示效果。
如果還沒有安裝Red語言的,可以參看我們《(三語)Red語言的安裝與簡單上手》一文來進行快速安裝。
將這段代碼保存為countLine.red文件,然后執(zhí)行這段程序的結果如下圖所示:
我們使用了命令行方式來執(zhí)行它,暫時不觸及圖形界面。加入--cli參數(shù)是為了不彈出圖形化的Red語言交互式環(huán)境(REPL),第二個參數(shù)是“D:\redprjs\countLine\countLine.red”,這對于我們的程序來說其實是第一個參數(shù),表示我們要獲取我們這個代碼本身文件的文本行數(shù),當然我們也可以換成其他文本文件的名字來獲取其他文件的行數(shù)。
程序的輸出我們都看到了,正確地得到了該文件的文本行數(shù)。至此,我們了解了Red語言的基本概念和編程方法,已經可以開始下一步更深入的學習了。
## Tpyora 語法總結
[TOC]
> 說明:
>
> 這里只是列舉了一些 Typora 的常用語法操作,一些高級用法 如 HTML標簽、配置CSS 樣式等這里沒有過多涉及。想了解這一部分內容可以訪問官網進行了解。
>
> 官網地址為: <https://www.typora.io/>
### 1. 基礎語法
##### 1.1 標題
ctrl+數(shù)字(1-5) 可以設置一級標題到五級標題。
這種功能 多個# 也可以實現(xiàn),一級標題一個#,五級標題五個#,以此類推。需要注意的是 # 與標題內容之間需要有 **空格**。
##### 1.2 文字格式
斜體: 如果一段文本的開頭和結尾分別被 \* 包含,則這一段文本會被展示為 *斜體*。這個功能可以直接使用 ctrl+I 快捷鍵
> 這種斜體效果與 \_斜體\_ 等效,即下面兩種的效果一樣
>
> *斜體文本* (\*斜體文本\*)
>
> _斜體文本_ (\_斜體文本_)
粗體: 如果一段文本的開頭和結尾分別被 \** 包含,則這一段文本會被展示為 **粗體**。這個功能可以直接使用 ctrl+B 快捷鍵
> 這種粗體效果 與 \_粗體\_ 等效,即下面兩種的效果一樣
>
> **粗體文本** (\*\*粗體文本\*\*)
>
> __粗體文本__ (\_\_粗體文本\_\_)
##### 1.3 引用
\> 之后的內容可以被當作引用內容,其效果如下所示:
> 這是引用內容
>
> > 這是嵌套第一層
> >
> > > 這是嵌套第二層
> > >
> > > [點擊跳轉...](https://www.baidu.com)
>語法說明如下。
>
>1. 多行引用也可以在每一行的開頭都插入 >。
>
>2. 在引用中可以嵌套引用。
>
>3. 在引用中可以使用其他的Markdown語法。
>
>4. 段落與換行的格式在引用中也是適用的。
##### 1.4 插入代碼
###### 1. 插入代碼塊
\``` 之后緊接著追加語言,可以針對不同的語言進行高亮展示
例:
```
yBatis 本是apache的一個開源項目iBatis,支持普通 SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架。MyBatis 消除了幾乎所有的JDBC代碼和參數(shù)的手工設置以及結果集的檢索。MyBatis 使用簡單的 XML或注解用于配置和原始映射,將接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java對象)映射成數(shù)據(jù)庫中的記錄。下面為大家說一說在Mybatis映射配置文件xml中如何處理大于號,小于號等特殊符號的。
其一:比較簡單實用的方式,直接轉譯了即可,如下面SQL語句
SELECT * FROM Table WHERE 1=1 AND startDate <=nowDate AND endDate >=nowDate
附:XML轉義字符具體如下:
< < 小于號
> > 大于號
& & 和
' ’ 單引號
" " 雙引號
其二:映射配置文件xml中時不允許出現(xiàn)類似“>”這樣的字符, Mybatis自身支持的<![CDATA[ ]]>符號,可以通過此類符號不進行解析 。
SQL語句如下:
SELECT * FROM Table WHERE 1=1 AND
start_date<![CDATA>=]]>
‘2016-11-23’ AND
end_date <![CDATA[<=]]>
’2016-12-16’
<![CDATA[ ]]>符號說明:
1)CDATA區(qū)域是由“<![CDATA["為開始標記,以“]]>”為結束標記,注意CDATA必須大寫
2)<![CDATA[文本內容]]> CDATA的文本內容中不能出現(xiàn)字符串,并且CDATA不能嵌套使用
3)在CDATA標記中的信息被解析器原封不動地傳給應用程序,并且不解析該段信息中的任何控制標記
*請認真填寫需求信息,我們會在24小時內與您取得聯(lián)系。