第96章 程式入門(八):類型系統

第96章 程式入門(八):類型系統

程式是什麼?

不同的人或許會給出不同的定義。不過如果讓程遠用最簡單的話語來描述的話,那麼程式便是“輸入,處理,輸出”!

沒有輸出的程式當然是存在的,只不過它沒有任何意義。以計算機為例,無論一個程序是要計算一個數字還是繪製一個圖形,它總要將結果輸出到屏幕、打印機或者其它的輸出設備上,否則這個程式的作用也就只有讓晶片發熱而已了——甚至嚴格說來,產生熱量也算是輸出的一種。

沒有輸入的程式當然也存在,然而如果換一種說法的話,我們也可以認為它們是“輸入為一個空集”的程式,而每次調用一個這樣的程式時,它都會返回完全相同的結果。什麼,你說有那種產生隨機數的程式?不好意思,嚴格地來說,這類程式需要一個隱含的“隨機數生成種子”作為輸入……它不能算是“沒有輸入”的程式。

除此之外,其它的程式都可以看做是接收一到多個輸入參數,最終產生一到多個輸出的演算過程。而且曾經有數學家證明過,每個“接收多個參數”的程式都可以被化簡為數個接收“單一參數”的程式的形式——當然,這個說法並不嚴謹,而且那也是后話了。

程式間是可以進行組合的。

只要類型相同,那麼我們便可以將一個程式的輸出接到第二個程式的輸入上,從而將二者組成一個更大的程式。那如何理解“類型相同”這個概念呢?舉個例子:其實除了集成電路之外,其它的物件也是可以用於演算的——例如帕斯卡的計算齒輪組,而只有當齒輪的模數(即齒的間距)相同時,兩個齒輪才能卡到一起。那麼如果我們將一組齒輪看做執行一類演算的程式的話,那這組齒輪中的第一個齒輪的屬性,便相當於這類程式允許接收的參數的類型。而同理,晶片的引腳電壓,以及電腦程式中的字符數字,它們都有各自的類型。如果不關注運算過程是否正確的話,只要類型相同,那多個程式或者說計算系統間便可以藉此進行組合了。

當成千上萬,成百上千萬的程式組合后,便形成了一個巨大的系統。這個系統也是一個程式,只不過它可以接收很多類型的輸入,並藉由各種各樣的輸出實現多種多樣的功能,譬如我們常按的計算器,常玩的電子遊戲,常用的作業系統……支撐它們正常工作的,正是它們內部運轉的程式。

而在這個神奇的位面中,雖然載體不同,但是這裏所特有的各種各樣的神奇魔法,奧術,技能……

它們的內核,亦是如此。

——

——

程遠用好奇的目光打量着浮現在他眼前的“原始碼”。

雖然構成這段代碼的並不是他所熟悉的任何一種地球位面的程序語言,不過幸運的是,構成這種語言的文字和算符,他絕大部分都認得。

不知道為什麼,這個位面,或者說至少這個小鎮所使用的文字和符號,都是標準的中文、英文、阿拉伯數字以及數學運算符,而他面前的程式也是如此。

說起來,地球位面的很多華國人總是對那些寫滿了英文字母的程序感到不滿,並且希望出現一種使用中文的編程語言。然而可惜的是,這種做法實際上並沒有太多的好處……或者說正因為中文的能力太過強大了,所以它並不適合進行編程。打個比方,一名外國人可能很難想像“中國隊大勝韓國隊”和“中國隊大敗韓國隊”表達的是同一個含義,而這種二義性正是程序的天敵。因此,即使使用中文編程,人們也必須使用一種沒有二義性的語法。

但這樣的話還是會有問題:按照目前的鍵盤輸入方式,中文字符的輸入難度遠大於英文字符,再打個比方:我們平時在做計算題時一般沒有人會願意寫漢字的“壹加貳等於叄”,同樣,寫程式的人也很少有人願意去使用“設甲為乙的平方與丙之和”這種寫法。而且話又說回來,現代的很多程序語言已經完全支持中文命名了,只不過很少有人會這樣用而已。

甚至如果要進一步來說的話,程序語言其實根本就不是英語,它們其實是一種獨立的符號語言,只不過是設計語言的工程師在挑選符號時,恰好使用了他們熟悉的英文字母而已。對於程式來說,真正重要的是它所代表的執行邏輯,只要邏輯相同,那使用什麼文字來編寫程式其實都是無所謂的。

“怎麼樣大笨蛋,看明白了嘛?”望着似有所悟的程遠,依靈調皮地戳了戳他的肩膀並問道。

“嗯,似乎能看懂一點。”程遠一邊審視着這些普通人看一眼就會覺得眼花的符號,一邊下意識地回答道。與此同時,他想嘗試用意念翻動一下面前的文字,可惜,他的操作沒有成功。

“大笨蛋你肯定是在吹牛皮!”依靈白了他一眼。就算是品學兼優的高中生,面對這麼多的程式指令時也會感覺頭痛,更何況是程遠這個從來沒有接觸過程式的菜鳥呢?

“這個還是很好懂的啊。”程遠不以為意地回答道:“不過這段程式有點長,我這一時半會可能還看不完。”

“那這樣吧。”依靈想了想后,收起了展示在程遠面前的彈窗。

“哎等等,我還沒看完吶!”程遠手舞足蹈,不對,張牙舞爪地抗議道。

“初學者不要好高騖遠。”依靈敲了一下青年的腦袋:“你先看明白這段入門程式再說吧。”

依靈一邊說著,又一邊在她的核芯系統中重新打開了另一個界面,隨後,另一段“原始碼”展示在了程遠的面前。

如果將這段原始碼翻譯成中文的話,它的邏輯是這樣的:

##

導入標準信息操作程式庫;

導入超距作用程式庫;

導入【花火】程式庫;

定義程式:【SequentialSpark-連環花火】,接收輸入參數:[能量],[信息點],“目標位置”,“攻擊強度”:

1-如果目標位置在超距作用場外,則退出程式,返回“法術施放失敗”。

2-執行程式【花火】,傳入:[能量],[信息點],目標位置,攻擊強度,並記錄“執行結果”。

3-如果執行結果為成功,則回到步驟2,否則如果執行結果為“能量用盡”或“信息點用盡”,則退出程式,返回“法術施放完成”。

##

望着這段眼前簡短了許多的“原始碼”,程遠罕見地皺起了眉。

“這段代碼是誰寫的啊?”程遠一邊皺着眉頭一邊喃喃自語道。

“是人家小時候寫的,怎麼了嘛?”見程遠表情有些奇怪,依靈疑惑地問道。

“哦,沒什麼沒什麼。”程遠知趣地收回了話題。不過青年還是在心底不停地念叨着:“這是什麼奇怪的語言啊,異界版的半吊子Basic?居然還有跳轉語句這種東西……而且這個判斷的寫法有問題,會漏掉一部分條件的。”

可惜,我們的主角還是忽略了一點,女孩子的直覺可是很可怕的。

依靈微微噘起了嘴,她隱隱地感覺到,程遠絕對是在心底默默地說她的壞話!

“那大笨蛋你覺得,這個程式的作用是什麼呢?”少女悄悄地開始了反擊。

“是循環執行【花火】這個程式吧。”程遠不假思索地回答道:“使用者在調用【連環花火】這個程式的時候,輸入的能量和信息點越多,能夠施展的【花火】的次數就越多。”

少女驚奇地睜大了眼睛。

——他竟然真的看懂了!

“而且如果我猜得沒錯的話。”程遠一無所覺地繼續說道:“使用這個程式時,設定的攻擊強度越強,能夠發動的【花火】程式的次數就越少——因為能量的總量是有限的。”

少女的眼睛越睜越大。

“不過我還有一點不太確認。”程遠又一邊皺着眉頭一邊說道:“按照這個程序的邏輯,這兩個參數[能量]和[信息點]應該會在執行【花火】這個程式的過程中發生改變吧,否則這個程式就無法終止了。這樣說來,'方括號'的含義是代表'引用傳遞'么?不過我有點好奇,能量和信息點這兩種實體是怎樣傳進程式裏面去的,如果我在程式中寫一行‘能量=能量+100’,會有什麼效果呢?”

程遠用虛心求教的眼神望向依靈。

“咳咳。”依靈連忙收起了自己有些震驚的表情,並故意用穩重的語調說道:“分析得還不錯,不過人家必須糾正一點,這個方括號代表的其實是‘特殊參數’,比如[能量],[信息點],以及你以後可能會學到的[動量]等。這幾類參數不能直接用數字進行賦值,只能通過分配的方式與同類型的參數間接地參與運算。”

依靈一邊說著,一邊在空中寫寫劃劃。

“比如,我們可以這樣寫:取二分之一的[能量1]→[能量2],這樣的話,我們就將能量1平均分成了兩份,隨後我們就可以把它們分給不同的子程式了。我們還可以寫:[能量1]←[能量2],這樣我們就又將兩份能量合併到了一起。”

這次輪到程遠驚訝了:“這樣的話……有意思!”

之前他也一直在疑惑,如果只是敲兩行“程式原始碼”就可以施展法術的話,那他如果將程式中的攻擊力數值設成一萬億,那豈不是隨手毀天滅地?不過現在看來,這個位面的人似乎是使用“類型系統”完美地避免了這種邏輯錯誤的發生。

“那人家也考你一個問題吧。”見程遠也並不是無所不知,依靈的小心思又活絡了起來:“如果人家執行剛才那個【連環花火】的程式,並傳入T2.0的能量與足夠的信息點,每次【花火】的攻擊強度是T1.7,那這個程式執行時總共能發動多少次【花火】攻擊呢?”

“嘿嘿,這個可難不倒我!”程遠略加思索便得到了答案,隨後他得意地回答道:“八次!”

按照這個位面的奇怪計數法,T2.0相當於T1.9的兩倍,T1.8的四倍,T1.7的八倍,所以除一下就得到答案了嘛,程遠這樣想道。

“回答……錯誤!”依靈的嘴角翹起了一個小小的弧度:“因為程式自身在執行時,也會消耗能量和信息點,所以最後的答案是……少於八次!”

程遠大驚:“怎麼還有這種設定啊?”

“然而這就是事實呀!”依靈壞笑道:“大笨蛋你要是不信的話,可以自己執行一下這個程式試試看呀。”

依靈一邊說著,一邊隨手在系統中敲了幾個參數,並將“程式執行”的權限也開放給了程遠。

“行呀!”程遠隨手就是一個“確認執行”的念頭髮了過去。然而他瞬間便意識到不對,如果按照依靈敲的那幾個參數執行這個程式的話……

“啪!啪!啪!啪!啪!啪!啪!”

一連串有着鞭炮爆炸般威力的小火花在程遠身邊炸開,程遠狼狽逃竄。

“捉弄大笨蛋真是太開心了!”

望着被嚇得遠遠跑開的程遠,少女的臉上久違地露出了一絲輕鬆的微笑。

上一章書籍頁下一章

核芯位面

···
加入書架
上一章
首頁 科幻靈異 核芯位面
上一章下一章

第96章 程式入門(八):類型系統

%