本页使用了标题或全文手工转换

指定敘述

维基百科,自由的百科全书
(重定向自指定敍述
跳到导航 跳到搜索

程序設計中,指定敘述英语:assignment statement),又譯指定指述,會將一個特定的設定到某個特定的儲存位址去,這個位置被標記成一個特定的變數名稱。換句話說,這個敘述會複製一個值到某個特定變數中。在多數的指令式程式語言中,這種敘述是其中最基礎的結構。

指定敘述的通用表示方法通常是 x = expr (這種表示法最早源自Superplan 1949–51,因為 Fortran 1957與C語言而廣為人知。),另一種形式則為 x := expr(這種形式最早來自ALGOL 1958,因為Pascal而盛行)。在這兩種表示法之外,仍然存在許多其他的形式。

對多數的指令式程式語言來說,指定敘述允許某個特定變數,在其生命週期與作用域之中,可以被指定為不同的值,或是重複被指定值。

概論[编辑]

指令式編程中,隨著時間改變,不同的值被關聯到某個特定的變數名稱上。變數是數值的容器。可以先指派變數為某個值,在之後再用另一個值來加以取代。在這種模型中,程式的運作,是透過每次成功的指定敘述,來改變其狀態。指令式程式語言,倚靠指定敘述來進行迭代。在最低的層級中,指定敘述是以組合語言指令,如 MOVESTORE來實作。

以C語言為例,下列的程式碼段落可以作為指定敘述的例子:

int x = 10; 
float y;
x = 23;
y = 32.4f;

在第一行程式碼中,變數x先被宣告為int型別,之後將數值10指定給它。在第二行,變數y被宣告為float型別,但沒有指定值。在第三行,變數x被重新指定為數值23。在第四行中,變數y被指定為浮點數值32.4f。

單次指定[编辑]

指定語句的回傳值[编辑]

在一些編程語言中,指定(賦值)敘述的整個語句可能會傳回某種型別的一個值,而在其它語言中則不會。

在 C 編程語言中指定語句只會單純返回指定值,而允許這樣子的片語 x = y = a,其中指定語句 y = a 返回值 a,然後將值指定到 x。在諸如 while ((ch = getchar()) != EOF) {} 的語句中,函數的返回值可用於控制迴圈,同時將相同的值指定給變量 ch

在其它編程語言中例如 Scheme,指定(賦值)語句的返回值是未定義的,而且這些片語無效。

在 Haskell 中沒有變量指定(賦值);但類似於指定(賦值)的操作(如分配給數組的字段或可變數據結構的字段)通常以 unit型別為單位進行求值,unit 型別以 ()表示。這種型別只有一個可能的值,因此不包含任何信息。它通常是純粹為了副作用而評估的表達型別。

指定的各種形式[编辑]

條件化指定[编辑]

連環指定[编辑]

並行指定[编辑]

指定與等式符號[编辑]

標記法[编辑]

複製分配的兩個最常見的表示形式是等號(=)和冒號等於(:=)。這兩種形式都可以在語義上表示賦值語句或賦值運算符(它也具有值),這取決於語言用法。

variable = expression Fortran, PL/I, C (and descendants such as C++, Java, etc.), Bourne shell, Python, Go (assignment to pre-declared variables), R, Windows PowerShell, etc.
variable := expression ALGOL (and derivatives), Simula, CPL, BCPL, Pascal[1] (and descendants such as Modula), Mary, PL/M, Ada, Smalltalk, Eiffel,[2][3] Oberon, Dylan,[4] Seed7, Go (shorthand for declaring and defining a variable),[5] Io, AMPL, ML,[6] etc.

其他可能性包括左箭頭或關鍵字,但還有其他更罕見的變體:

variable << expression Magik
variable <- expression F#, OCaml, R, S
variable <<- expression R
assign("variable", expression) R
variableexpression APL,[7] Smalltalk
variable =: expression J
LET variable = expression BASIC
let variable := expression XQuery
set variable to expression AppleScript
set variable = expression C shell
Set-Variable variable (expression) Windows PowerShell
variable : expression Macsyma, Maxima, Rebol
var variable expression mIRC scripting language
reference-variable :- reference-expression Simula

數學偽代碼分配通常用左箭頭表示。有些平台將表達式放在左側,變量放在右側:

MOVE expression TO variable COBOL
expressionvariable TI-BASIC, Casio BASIC
expression -> variable BETA, R
put expression into variable LiveCode

一些面向運算式的語言比如 Lisp 和 Tcl,對所有語句(包括賦值)統一使用前綴(或後綴)語法。

(setf variable expression) Common Lisp
(set! variable expression) Scheme[8][9][10]
set variable expression Tcl
expression variable ! Forth

另見[编辑]

註釋[编辑]

  1. ^ Moore, Lawrie. Foundations of Programming with Pascal. New York: John Wiley & Sons. 1980. ISBN 0-470-26939-1. 
  2. ^ Meyer, Bertrand. Eiffel the Language. Hemel Hempstead: Prentice Hall International(UK). 1992. ISBN 0-13-247925-7. 
  3. ^ Wiener, Richard. An Object-Oriented Introduction to Computer Science Using Eiffel. Upper Saddle River, New Jersey: Prentice Hall. 1996. ISBN 0-13-183872-5. 
  4. ^ Feinberg, Neal; Keene, Sonya E.; Mathews, Robert O.; Withington, P. Tucker. Dylan Programming. Massachusetts: Addison Wesley. 1997. ISBN 0-201-47976-1. 
  5. ^ The Go Programming Language Specification - The Go Programming Language. golang.org. [20 April 2018]. 
  6. ^ Ullman, Jeffrey D. Elements of ML Programming: ML97 Edition. Englewood Cliffs, New Jersey: Prentice Hall. 1998. ISBN 0-13-790387-1. 
  7. ^ Iverson, Kenneth E. A Programming Language. John Wiley and Sons. 1962. ISBN 0-471-43014-5. (原始内容存档于2009年6月4日). 
  8. ^ Dybvig, R. Kent. The Scheme Programming Language: ANSI Scheme. New Jersey: Prentice Hall. 1996. ISBN 0-13-454646-6. 
  9. ^ Smith, Jerry D. Introduction to Scheme. New Jersey: Prentice Hall. 1988. ISBN 0-13-496712-7. 
  10. ^ Abelson, Harold; Sussman, Gerald Jay; Sussman, Julie. Structure and Interpretation of Computer Programs. New Jersey: McGraw-Hill. 1996. ISBN 0-07-000484-6. 

參考[编辑]