為什麼多數程式語言的賦值在左邊?是有什麼歷史淵源嗎?

時間 2021-06-06 04:34:48

1樓:汽車小T

哈哈,其實這裡有乙個很重要的概念,叫防禦式程式設計。賦值如果放在左邊,那麼如果本來你想用3==X,但一不小心寫成了3=x,那麼編譯器能夠立馬報錯告知你這個錯誤。否則,如果你反過來寫,那麼編譯器並不一定能夠識別你的真正意圖。

2樓:天涯獨步輪迴

我想主要是,開頭賦了值,後面程式中用的不是那個數值,而是那個單詞。

比如,a=5

之後的語句中用的都是a,5只是乙個初始的定義!

而程式中都是左端對齊的,不知道a是什麼含義,直接上去一找很方便。

當然,你要用右對齊或者居中對齊也不是不可以,感覺怪怪的,不符合規則

3樓:星風雪月

我覺得兩種都可以,場景不同,表達方式就有所不同。

向左賦值

let a = 1

令a等於1,是非常自然通順的表達。

而向右賦值更適合這種情況

a -> fun1 -> fun2 -> fun3 -> ba通過fun1~fun3幾個函式的處理,結果儲存到b。

4樓:一絲混亂

就是因為符合左到右讀的習慣

一般都是"a是3"、「b是4」、「stdin是a+b」,而不是「3是a」、「4是b」、「a+b是stdin」

讓人疑惑的原因其實不是順序,因為語言顛來倒去都能描述:「大黃是只狗」「有只狗叫大黃」。

讓人疑惑恰恰是"="這個符號。

5樓:昌維

因為最早以前的intel彙編以及大多數ARM組合語言就是預設目的暫存器rd在左邊源暫存器rs在右邊。

這個設計也有可能和高讚答案中說的自然語言語法有關。

6樓:

因為以英語為首的西方語言(應該是拉丁語系?我對語言學不太了解)的文字書寫方式應該是從左到右,從上到下的,(而且對於人類中廣泛存在的右撇子這樣寫字確實很方便),所以以此為基礎的數學符號體系也是這個書寫順序。

至於為什麼要把變數寫左邊,因為你可以這樣寫某個值 a = 1+2*3=1+6=7 對於從左向右的書寫順序,這樣寫起來最易懂

因此以語言和數學為基礎的高階程式語言才這樣定義吧如果讓古代中中國人統治世界發明出一套數學體系並成為科學的基礎,程式語言會是從上到下從右到左的嗎? 電腦內的文字編輯軟體也會需要按照這樣的順序嗎?

7樓:pansz

因為在多數自然語言裡面,主語在賓語的左邊。

操作符也叫做謂詞,這個意思是說,程式語言的操作符語句其實是仿造主謂賓結構製造出來的。

從自然語言裡邊已經構建了「左值可變,右值不可變」的約定習慣。

而對於賦值行為來說,被賦值的那個變數往往會改變,而另外乙個變數不被影響。

所以,既然賦值語句中的被賦值變數將要改變,它就應該放在左邊。

8樓:glatavento

個人感覺變數名在左邊更符合從數學承襲下來的直覺,數學裡面也常常會用「當x=5」這樣的說法。一旦幾門早期語言確定了這個用法,後面的語言也會跟風(不然會造成理解上的困難)。

不過也不是所有語言都會照顧這種數學直覺。很多語言不用=表示賦值,比如lisp、self;也有一些語言把變數名放在右邊,比如forth用5 x !,factor用5 x set(對於這兩門語言,這樣寫倒是相當合理)。

9樓:

emmm如果變數名寫在右邊的話,可能會這樣:

'This is a f***ing long string so that you can

\'t see the name lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol lol'

=example_str

為什麼c語言unsigned char賦值給long使用的是movzbl而不是movzbq?

磨劍 最近看 深入理解計算機系統 的時候也有同樣的疑問。據查首先毫無疑問兩者都能達到同樣的效果,但是movzbl的位元組碼更短,X86 64上測試資料表明movzbl為3 byte,movzbq為4 byte,這就意味著更快更小。當然還有說法是movzbl指令效率更高一點,猜測這個可能跟硬體有關吧。...

為什麼大多數程式語言中陣列的第乙個元素的索引不從 1 開始?

漁父 因為對模運算太不友好了,什麼事都得想著 1,Matlab 用的我想死,結果 Julia 還這麼設計。autoi k quarter auto result complex t 這個 C 怎麼翻譯成 Matlab Julia k 是個模 quarter 的週期變數,quarter i 是 qua...

為什麼說一門程式語言在語言層面支援併發呢?

面向併發並行要寫的爽,需要一系列基礎設施,除了 M N 的排程模型外,還有 1 訊息佇列及其公平排程 2 活動物件 輕量級程序 的故障隔離和監控3 immutable 資料結構 4 如果是 gc 語言,還要支援 private heap shared heap,才能做到輕量級程序間的 gc 基本互不...