指定叙述

title: 概论.
content: 在指令式编程中,随着时间改变,不同的值被关联到某个特定的变量名称上。变量是数值的容器。可以先指派变量为某个值,在之后再用另一个值来加以取代。在这种模型中,程序的运作,是透过每次成功的指定叙述,来改变其状态。指令式程序语言,倚靠指定叙述来进行迭代。在最低的层级中,指定叙述是以组合语言指令,如 codice_3 或 codice_4来实作。  以C语言为例,下列的程序码段落可以作为指定叙述的例子: int x = 10; float y; x = 23; y = 32.4f; 在第一行程序码中,变量codice_5先被宣告为int型别,之后将数值10指定给它。在第二行,变量codice_6被宣告为float型别,但没有指定值。在第三行,变量codice_5被重新指定为数值23。在第四行中,变量codice_6被指定为浮点数值32.4f。
title: 单赋值.
content: 任何改变现存值的赋值(比如codice_9),在纯函数式语言中都是不允许的。在函数式编程中,赋值是被劝阻的,用以支持也叫做“初始化”的单赋值。单赋值是的用例,不同于本文其他部分描述的赋值之处在于,它只能做一次,通常是在变量被创建的时候,不允许后续的重新赋值。  表达式的求值,如果不改变机器的可察见状态,并且对相同的输入产生相同的值,就没有副作用。指令式赋值,在销毁旧值并使之不可获得时,在将旧值替代为新值时,就可能介入了副作用;为此在LISP和函数式编程中,这被称为“破坏性”(destructive)赋值,类似于“破坏性更新”。  在纯函数式语言比如Haskell中,单赋值是赋值的唯一形式,这里没有在指令式语言意义上的变量,而是命名的常量值,并具有可能的合成(compoud)本性,即它们的元素"在需要时"被逐步的定义。纯函数式语言,由于值之间相互独立,可以提供在并行计算上的优势,它避免了顺序的一时一步执行的冯·诺伊曼瓶颈。  非纯函数式语言,同时提供了单赋值和真赋值(尽管相比指令式编程语言而言真赋值典型的较少使用)。例如,在Scheme中,单赋值(通过codice_10),和真赋值(通过codice_11),二者都可以用于所有变量上,并提供专门的原语(primitive)用于在列表、向量、字符串等之内做破坏性更新。在OCaml中,只有单赋值,通过codice_12语法,被允许用于变量;而破坏性更新,可通过单独的codice_13算符,用于数组的元素和字符串,还可用于已经被编程者显式声明为可变(意味着能够在其初始化声明之后被变更)的记录字段和对象。  使用单赋值的函数式编程语言,包括Clojure(针对数据结构,而非变量)、Erlang(相比Haskell,它接受多次赋值,如果值相等的话)、F#、Haskell、Lava、OCaml、Oz(对用数据流变量,而非cell)、Racket(对于一些数据结构如列表,而非符号)、SASL、Scala(对于变量)、SISAL、Standard ML。非回溯的Prolog代码可以被看作“明显的”单赋值,这里明显的含义为,它的(命名)变量可以显式的处在未赋值状态,或只能准确的被设置一次。相反的,在Haskell中,没有未赋值变量,而所有变量可以看作在创建时就被隐式的设定了它的值(更精确的说是设置了计算对象在“在需要时”产生它的值)。
title: 指定语句的回传值.
content: 在一些编程语言中,指定(赋值)叙述的整个语句可能会传回某种型别的一个值,而在其它语言中则不会。  在 C 编程语言中指定语句只会单纯返回指定值,而允许这样子的词组 codice_14,其中指定语句 codice_15 返回值 codice_16,然后将值指定到 codice_5。在诸如 codice_18 的语句中,函数的返回值可用于控制循环,同时将相同的值指定给变量 codice_19。  在其它编程语言中例如 Scheme,指定(赋值)语句的返回值是未定义的,而且这些词组无效。  在 Haskell 中没有变量指定(赋值);但类似于指定(赋值)的操作(如分配给数组的字段或可变量据结构的字段)通常以 codice_20型别为单位进行求值,codice_20 型别以 codice_22表示。这种型别只有一个可能的值,因此不包含任何信息。它通常是纯粹为了副作用而评估的表达型别。
title: 指定的各种形式.
title: 并行赋值.
content: 一些编程语言,比如APL、Common Lisp、Go、JavaScript(自从1.7)、Lua、Maple、occam 2、Perl、PHP、Python、REBOL、Ruby、Windows PowerShell,允许多个变量被并行的赋值,语法如下:  它同时赋值codice_23到codice_16和codice_25到codice_26。这经常叫做并行(parallel)赋值;它是CPL语言于1963年介入的,当时名字叫做同时(simultaneous)赋值,有时也叫做多(multiple)赋值,但这在与单(single)赋值一起用时会产生混淆,因为它们不是对比的。如果赋值的右手侧是一个单一变量(比如一个数组或结构),这个特征就叫做解包(unpacking)或解构(destructuring)赋值:  这个列表将被解包使得赋值codice_23至codice_16和codice_25至codice_26。进一步的:  对换codice_16和codice_26的值。在没有并行赋值的语言中,这必须通过临时变量来书写:  因为codice_33将把codice_16和codice_26二者都赋值为codice_26最初的值。  一些语言,比如Go和Python,将并行赋值、元组和自动结合起来,允许从一个单一函数返回多个值,比如如下Python的例子:  def f(): a, b = f() 而其他语言,比如C#,要求使用圆括号的显式元组构造和解构,如下面例子这样:  (a, b) = (b, a);  (string, int) f() => ("foo", 1); var (a, b) = f(); 这提供了从一个函数返回多个值要使用输出参数的一种替代方式。这最早见于CLU语言(1974年),而CLU推动了一般的并行赋值变得流行。  在C和C++中,,在允许多个赋值出现在一个单一语句上类似于并行赋值,写codice_37替代codice_38。这主要用在for循环中,在其他语言比如Go中,被替代为并行赋值。但是上述C++代码不确保完全的同时性,因为代码codice_39的右侧项是在左侧项之后运算的。在语言如Python中,codice_40将并发的赋值两个变量,使用最初的codice_16的值来计算新codice_26的值.
title: 标记法.
content: 复制分配的两个最常见的表示形式是等号(codice_43)和冒号等于(codice_44)。这两种形式都可以在语义上表示赋值语句或赋值运算符(它也具有值),这取决于语言用法。  其他可能性包括左箭头或关键字,但还有其他更罕见的变体:  数学伪代码分配通常用左箭头表示。有些平台将表达式放在左侧,变量放在右侧:  一些面向运算式的语言比如 Lisp 和 Tcl,对所有语句(包括赋值)统一使用前缀(或后缀)语法。

Summary: 在程序设计中,指定叙述(英语:assignment statement),又译指定指述,会将一个特定的值设定到某个特定的储存位址去,这个位置被标记成一个特定的变量名称。换句话说,这个叙述会复制一个值到某个特定变量中。在多数的指令式程序语言中,这种叙述是其中最基础的结构。

Assignment (computer science): In computer programming, an assignment statement sets and/or re-sets the value stored in the storage location(s) denoted by a variable name; in other words, it copies a value into the variable. In most imperative programming languages, the assignment statement (or expression) is a fundamental construct.