官术网_书友最值得收藏!

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

  • 核芯位面
  • 貍花雀
  • 3759字
  • 2018-11-15 23:03:03

程式是什么?

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

沒有輸出的程式當(dāng)然是存在的,只不過它沒有任何意義。以計(jì)算機(jī)為例,無論一個(gè)程序是要計(jì)算一個(gè)數(shù)字還是繪制一個(gè)圖形,它總要將結(jié)果輸出到屏幕、打印機(jī)或者其它的輸出設(shè)備上,否則這個(gè)程式的作用也就只有讓芯片發(fā)熱而已了——甚至嚴(yán)格說來,產(chǎn)生熱量也算是輸出的一種。

沒有輸入的程式當(dāng)然也存在,然而如果換一種說法的話,我們也可以認(rèn)為它們是“輸入為一個(gè)空集”的程式,而每次調(diào)用一個(gè)這樣的程式時(shí),它都會(huì)返回完全相同的結(jié)果。什么,你說有那種產(chǎn)生隨機(jī)數(shù)的程式?不好意思,嚴(yán)格地來說,這類程式需要一個(gè)隱含的“隨機(jī)數(shù)生成種子”作為輸入……它不能算是“沒有輸入”的程式。

除此之外,其它的程式都可以看做是接收一到多個(gè)輸入?yún)?shù),最終產(chǎn)生一到多個(gè)輸出的演算過程。而且曾經(jīng)有數(shù)學(xué)家證明過,每個(gè)“接收多個(gè)參數(shù)”的程式都可以被化簡為數(shù)個(gè)接收“單一參數(shù)”的程式的形式——當(dāng)然,這個(gè)說法并不嚴(yán)謹(jǐn),而且那也是后話了。

程式間是可以進(jìn)行組合的。

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

當(dāng)成千上萬,成百上千萬的程式組合后,便形成了一個(gè)巨大的系統(tǒng)。這個(gè)系統(tǒng)也是一個(gè)程式,只不過它可以接收很多類型的輸入,并借由各種各樣的輸出實(shí)現(xiàn)多種多樣的功能,譬如我們常按的計(jì)算器,常玩的電子游戲,常用的操作系統(tǒng)……支撐它們正常工作的,正是它們內(nèi)部運(yùn)轉(zhuǎn)的程式。

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

它們的內(nèi)核,亦是如此。

——

——

程遠(yuǎn)用好奇的目光打量著浮現(xiàn)在他眼前的“源代碼”。

雖然構(gòu)成這段代碼的并不是他所熟悉的任何一種地球位面的程序語言,不過幸運(yùn)的是,構(gòu)成這種語言的文字和算符,他絕大部分都認(rèn)得。

不知道為什么,這個(gè)位面,或者說至少這個(gè)小鎮(zhèn)所使用的文字和符號(hào),都是標(biāo)準(zhǔn)的中文、英文、阿拉伯?dāng)?shù)字以及數(shù)學(xué)運(yùn)算符,而他面前的程式也是如此。

說起來,地球位面的很多華國人總是對那些寫滿了英文字母的程序感到不滿,并且希望出現(xiàn)一種使用中文的編程語言。然而可惜的是,這種做法實(shí)際上并沒有太多的好處……或者說正因?yàn)橹形牡哪芰μ^強(qiáng)大了,所以它并不適合進(jìn)行編程。打個(gè)比方,一名外國人可能很難想象“中國隊(duì)大勝韓國隊(duì)”和“中國隊(duì)大敗韓國隊(duì)”表達(dá)的是同一個(gè)含義,而這種二義性正是程序的天敵。因此,即使使用中文編程,人們也必須使用一種沒有二義性的語法。

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

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

“怎么樣大笨蛋,看明白了嘛?”望著似有所悟的程遠(yuǎn),依靈調(diào)皮地戳了戳他的肩膀并問道。

“嗯,似乎能看懂一點(diǎn)?!背踢h(yuǎn)一邊審視著這些普通人看一眼就會(huì)覺得眼花的符號(hào),一邊下意識(shí)地回答道。與此同時(shí),他想嘗試用意念翻動(dòng)一下面前的文字,可惜,他的操作沒有成功。

“大笨蛋你肯定是在吹牛皮!”依靈白了他一眼。就算是品學(xué)兼優(yōu)的高中生,面對這么多的程式指令時(shí)也會(huì)感覺頭痛,更何況是程遠(yuǎn)這個(gè)從來沒有接觸過程式的菜鳥呢?

“這個(gè)還是很好懂的啊?!背踢h(yuǎn)不以為意地回答道:“不過這段程式有點(diǎn)長,我這一時(shí)半會(huì)可能還看不完。”

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

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

“初學(xué)者不要好高騖遠(yuǎn)?!币漓`敲了一下青年的腦袋:“你先看明白這段入門程式再說吧?!?

依靈一邊說著,又一邊在她的核芯系統(tǒng)中重新打開了另一個(gè)界面,隨后,另一段“源代碼”展示在了程遠(yuǎn)的面前。

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

##

導(dǎo)入標(biāo)準(zhǔn)信息操作程式庫;

導(dǎo)入超距作用程式庫;

導(dǎo)入【花火】程式庫;

定義程式:【Sequential Spark-連環(huán)花火】,接收輸入?yún)?shù):[能量],[信息點(diǎn)],“目標(biāo)位置”,“攻擊強(qiáng)度”:

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

2 -執(zhí)行程式【花火】,傳入:[能量],[信息點(diǎn)],目標(biāo)位置,攻擊強(qiáng)度,并記錄“執(zhí)行結(jié)果”。

3 -如果執(zhí)行結(jié)果為成功,則回到步驟2,否則如果執(zhí)行結(jié)果為“能量用盡”或“信息點(diǎn)用盡”,則退出程式,返回“法術(shù)施放完成”。

##

望著這段眼前簡短了許多的“源代碼”,程遠(yuǎn)罕見地皺起了眉。

“這段代碼是誰寫的???”程遠(yuǎn)一邊皺著眉頭一邊喃喃自語道。

“是人家小時(shí)候?qū)懙?,怎么了嘛?”見程遠(yuǎn)表情有些奇怪,依靈疑惑地問道。

“哦,沒什么沒什么?!背踢h(yuǎn)知趣地收回了話題。不過青年還是在心底不停地念叨著:“這是什么奇怪的語言啊,異界版的半吊子Basic?居然還有跳轉(zhuǎn)語句這種東西……而且這個(gè)判斷的寫法有問題,會(huì)漏掉一部分條件的?!?

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

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

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

“是循環(huán)執(zhí)行【花火】這個(gè)程式吧?!背踢h(yuǎn)不假思索地回答道:“使用者在調(diào)用【連環(huán)花火】這個(gè)程式的時(shí)候,輸入的能量和信息點(diǎn)越多,能夠施展的【花火】的次數(shù)就越多?!?

少女驚奇地睜大了眼睛。

——他竟然真的看懂了!

“而且如果我猜得沒錯(cuò)的話?!背踢h(yuǎn)一無所覺地繼續(xù)說道:“使用這個(gè)程式時(shí),設(shè)定的攻擊強(qiáng)度越強(qiáng),能夠發(fā)動(dòng)的【花火】程式的次數(shù)就越少——因?yàn)槟芰康目偭渴怯邢薜?。?

少女的眼睛越睜越大。

“不過我還有一點(diǎn)不太確認(rèn)?!背踢h(yuǎn)又一邊皺著眉頭一邊說道:“按照這個(gè)程序的邏輯,這兩個(gè)參數(shù)[能量]和[信息點(diǎn)]應(yīng)該會(huì)在執(zhí)行【花火】這個(gè)程式的過程中發(fā)生改變吧,否則這個(gè)程式就無法終止了。這樣說來,'方括號(hào)'的含義是代表'引用傳遞'么?不過我有點(diǎn)好奇,能量和信息點(diǎn)這兩種實(shí)體是怎樣傳進(jìn)程式里面去的,如果我在程式中寫一行‘能量=能量+100’,會(huì)有什么效果呢?”

程遠(yuǎn)用虛心求教的眼神望向依靈。

“咳咳?!币漓`連忙收起了自己有些震驚的表情,并故意用穩(wěn)重的語調(diào)說道:“分析得還不錯(cuò),不過人家必須糾正一點(diǎn),這個(gè)方括號(hào)代表的其實(shí)是‘特殊參數(shù)’,比如[能量],[信息點(diǎn)],以及你以后可能會(huì)學(xué)到的[動(dòng)量]等。這幾類參數(shù)不能直接用數(shù)字進(jìn)行賦值,只能通過分配的方式與同類型的參數(shù)間接地參與運(yùn)算?!?

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

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

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

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

“那人家也考你一個(gè)問題吧。”見程遠(yuǎn)也并不是無所不知,依靈的小心思又活絡(luò)了起來:“如果人家執(zhí)行剛才那個(gè)【連環(huán)花火】的程式,并傳入T2.0的能量與足夠的信息點(diǎn),每次【花火】的攻擊強(qiáng)度是T1.7,那這個(gè)程式執(zhí)行時(shí)總共能發(fā)動(dòng)多少次【花火】攻擊呢?”

“嘿嘿,這個(gè)可難不倒我!”程遠(yuǎn)略加思索便得到了答案,隨后他得意地回答道:“八次!”

按照這個(gè)位面的奇怪計(jì)數(shù)法,T2.0相當(dāng)于T1.9的兩倍,T1.8的四倍,T1.7的八倍,所以除一下就得到答案了嘛,程遠(yuǎn)這樣想道。

“回答……錯(cuò)誤!”依靈的嘴角翹起了一個(gè)小小的弧度:“因?yàn)槌淌阶陨碓趫?zhí)行時(shí),也會(huì)消耗能量和信息點(diǎn),所以最后的答案是……少于八次!”

程遠(yuǎn)大驚:“怎么還有這種設(shè)定???”

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

依靈一邊說著,一邊隨手在系統(tǒng)中敲了幾個(gè)參數(shù),并將“程式執(zhí)行”的權(quán)限也開放給了程遠(yuǎn)。

“行呀!”程遠(yuǎn)隨手就是一個(gè)“確認(rèn)執(zhí)行”的念頭發(fā)了過去。然而他瞬間便意識(shí)到不對,如果按照依靈敲的那幾個(gè)參數(shù)執(zhí)行這個(gè)程式的話……

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

一連串有著鞭炮爆炸般威力的小火花在程遠(yuǎn)身邊炸開,程遠(yuǎn)狼狽逃竄。

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

望著被嚇得遠(yuǎn)遠(yuǎn)跑開的程遠(yuǎn),少女的臉上久違地露出了一絲輕松的微笑。

主站蜘蛛池模板: 汽车| 叙永县| 丹凤县| 朝阳区| 南汇区| 松阳县| 南开区| 马关县| 宜昌市| 灵璧县| 张北县| 聂荣县| 营山县| 秭归县| 城市| 华宁县| 泰宁县| 岳池县| 曲沃县| 眉山市| 化德县| 邻水| 吉隆县| 德化县| 利津县| 独山县| 广平县| 资中县| 基隆市| 托克托县| 惠安县| 庆安县| 固安县| 江源县| 将乐县| 苏尼特左旗| 安陆市| 滦南县| 武山县| 泸定县| 九江县|