Io 程式設計/初學者指南/Io 程式的基本組成部分
要編寫有效的 Io 程式,您需要熟悉一些基本組成部分。
嚴格來說,Io 沒有關鍵字。但是,它確實有一個語法糖層,就所有意圖和目的而言,它給了它一些關鍵字。整個語言中只有三個這樣的非真正關鍵字。我們已經看到一個了。
;- 分號用於分隔計算機應該執行的不同操作。您不會經常使用它,但有時它會非常方便。
=- 等號用於 *更新已存在的* 變數。但是,如果我們還沒有宣告變數怎麼辦?輸入......
:=- 此賦值運算子(讀作“變為”)用於 *建立新的* 變數(如果它碰巧已經存在,它也會更新它)。·
我們現在還不會深入研究這些非完全關鍵字如何影響 Io。現在,讓我們假裝它們是真正的關鍵字。
字串實際上是 *字元的字串*。這些是包裹在引號中的文字塊,如下所示
Io> "Hello world!" ==> "Hello world!"
有時,將換行符、製表符甚至響鈴(但不是哨子)也放入文字中非常方便。我們使用 *轉義序列* 來做到這一點。迄今為止,您最常使用的 #1 轉義序列是 \n。此特定轉義序列表示換行符,相當於按下回車鍵。如果您只是在這個字串中間按下了回車鍵,它會使 Io 困惑。
我提到了“這種”字串,因為這最終成為一個大問題,以至於最終實現了一種新的型別(借鑑自 Python)。這就是現在著名的 *三引號* 字串。它們看起來像這樣
Io> """Hello world!""" ==> "Hello world!"
有什麼區別?三引號字串 *允許* 您直接在中間鍵入 ENTER 鍵
Io> """Dear sir, "-> "-> I must admit, I really like your suggestion "-> to learn Io. Thank you for the kind words. "-> "-> Sincerely, "-> "-> "-> Robert. "-> """ ==> Dear sir, I must admit, I really like your suggestion to learn Io. Thank you for the kind words. Sincerely, Robert.
您通常不會在大多數書籍中將函式和過程產生的結果列為語言元素。但是,Io 不同——它是一個 *非常* 真實的語言元素,您 *必須* 處理它。這相當令人不祥,不是嗎?
在 Io 中,與許多函數語言程式設計語言一樣, *您在 Io 中所說或所做的任何事情都是表示式*。這是“花哨的計算機科學術語”,意思是 *您所說或所做的任何事情都會產生某種結果,該結果可以由程式的後續部分使用*。現在您知道為什麼我們更喜歡計算機科學的方式而不是用簡單英語表達它!
讓我們更深入地分解一下。一個 *表示式* 是任何產生某種 *值* 的東西。值可以是字串、數字、布林值(真/假)東西,任何東西。示例
Io> 4+4 ==> 8 Io> 15 - 150 ==> -135 Io> "Hi!" ==> Hi!
好的,因此我們剛剛證明了 Io 是一個美化的計算器。就其本身而言,這完全沒有意思。但是,使表示式有用的原因是,我們可以 *對* 結果做一些事情,然後再實際給出最終結果。
Io> "There are " .. (8*10)+19 .. " bottles of beer on that very wall, over there." ==> There are 99 bottles of beer on that very wall, over there.
在這裡,我們使用 .. 運算子將事物 *連線* 到一起,形成一個單一值。在這種情況下,我們正在將 (8*10)+19 的 *結果* 附加到字串“There are”,得到“There are 99”。然後,將“ bottles of beer...." 附加到其中,得到我們上面看到的結果。
如果 Io 對錶達式的結果無事可做,它會列印 ==> 箭頭和結果,並假設您關心它。當然,通常情況下,您確實關心,否則,您一開始就不會讓結果在沒有進一步處理的情況下繼續!
如果某些計算或操作無法返回任何有用的結果,則返回 nil。正如我們之前在使用 writeln 玩耍時所看到的,我們注意到它 *返回* 了 nil 值。這是因為它實際上並沒有為我們計算任何東西;它是一個純粹的動作。
數字基本上與您預期的一樣。整數和實數都以相同的方式處理(實際上,目前,它們總是轉換為雙精度浮點數表示以保持一致)。以下是一些數字的示例
Io> 45 ==> 45 Io> 4.5e+2 ==> 450 Io> 4.5e+38 ==> 4.500000e+38 Io> -15360.263823 ==> -15360.263823
使用 C 風格的語法 0x 和十六進位制數字,十六進位制值也是允許的
Io> 0xDEAD ==> 57005 Io> 0xBEEF ==> 48879 Io> 0xDEADBEEF ==> 3.735929e+09 Io> 0xDEADBEEFFEEDFACE ==> 4.294967e+09
最後一個數字向我們展示了一些有趣的東西——它顯然對於如此大的十六進位制數字來說太小了!事實證明,在將十六進位制數轉換為其內部表示時,只保留了 32 位的精度。如果十六進位制數大於此,則改為使用最大的 32 位整數。
有些人可能會說這是 Io 中的錯誤。也許吧;但這本書不做判斷。但是,如果您打算操作超過 32 位精度的十六進位制值,則需要先將其手動轉換為十進位制表示法。
其他一些語言支援複數、無限精度數等概念。Io 並不使用語言直譯器提供的基本一組基元來支援這些概念。但是,這些可以透過外部外掛或透過 Io 本身來新增。
令人驚訝的是——Io 是一種面向物件的語言,即使我們直到現在才介紹它。