指定敘述- 维基百科,自由的百科全书
文章推薦指數: 80 %
在程序設計中,指定敘述(英語:assignment statement),會將一個特定的值設定到某個特定的儲存位址去,這個位置被標記成一個特定的變數名稱。
換句話說,這個敘述會 ...
指定敘述
語言
監視
編輯
在程式設計中,指定敘述(英語:assignmentstatement),又譯指定指述,會將一個特定的值設定到某個特定的儲存位址去,這個位置被標記成一個特定的變數名稱。
換句話說,這個敘述會複製一個值到某個特定變數中。
在多數的指令式程式語言中,這種敘述是其中最基礎的結構。
指定敘述的通用表示方法通常是x=expr(這種表示法最早源自1949年–1951年時的Superplan(英語:Superplan),因為1957年首版的Fortran與C語言而廣為人知),另一種形式則為x :=expr(這種形式最早來自ALGOL58,因為Pascal而盛行)。
在這兩種表示法之外,仍然存在許多其他的形式。
對多數的指令式程式語言來說,指定敘述允許某個特定變數,在其生命週期與作用域之中,可以被指定為不同的值,或是重複被指定值。
目次
1語意
2單指定
3指定語句的回傳值
4指定的變體形式
4.1增廣指定
4.2鏈式指定
4.3並列指定
5指定與等式符號
6標記法
7另見
8註釋
語意編輯
在指令式編程中,隨著時間改變,不同的值被關聯到某個特定的變數名稱上。
變數是數值的容器。
可以先指派變數為某個值,在之後再用另一個值來加以取代。
在這種模型中,程式的運作,是透過每次成功的指定敘述,來改變其狀態。
指令式程式語言,倚靠指定敘述來進行迭代。
在最低的層級中,指定敘述是以組合語言指令,如MOVE或STORE來實作。
以C語言為例,下列的程式碼段落可以作為指定敘述的例子:
intx=10;
floaty;
x=23;
y=32.4f;
在第一行程式碼中,變數x先被宣告為int型別,之後將數值10指定給它。
在第二行,變數y被宣告為float型別,但沒有指定值。
在第三行,變數x被重新指定為數值23。
在第四行中,變數y被指定為浮點數值32.4f。
單指定編輯
參見:靜態單指定形式
任何改變現存值的指定(比如x :=x+1),在純函數式語言中都是不允許的[1]。
在現今的函式語言程式設計中,指定是被勸阻的,用以支援也叫做「初始化」的單指定。
單指定是名字繫結的用例,不同於本文其他部分描述的指定之處在於,它只能做一次,通常是在變數被建立的時候,不允許後續的重新指定。
表達式的求值,如果不改變機器的可察見狀態[2],並且對相同的輸入產生相同的值[1],就沒有副作用。
指令式指定,在銷毀舊值並使之不可獲得時,在將舊值替代為新值時,就可能介入了副作用[3];為此在LISP和函式語言程式設計中,這被稱為「破壞性」(destructive)指定,類似於「破壞性更新」。
在純函數式語言比如Haskell中,單指定是指定的唯一形式,這裡沒有在指令式語言意義上的變數[1],而是命名的常數值,並具有可能的合成(compoud)本性,即它們的元素"在需要時"被逐步的定義。
純函式語言程式設計和與之於此共通的資料流程編程,由於值之間相互獨立,可以提供在平行計算上的優勢,它避免了順序的一時一步執行的馮·紐曼瓶頸[4]。
非純函數式語言,同時提供了單指定和真指定(儘管相比指令式程式語言而言真指定典型的較少使用)。
例如,在Scheme中,單指定(通過let),和真指定(通過set!),二者都可以用於所有變數上,並提供專門的原語(primitive)用於在列表、向量、字串等之內做破壞性更新。
在OCaml中,只有單指定,通過letname=value語法,被允許用於變數;而破壞性更新,可通過單獨的("foo",1);
var(a,b)=f();
這提供了從一個函式返回多個值要使用輸出參數的一種替代方式。
這最早見於CLU語言(1974年),而CLU推動了一般的並列指定變得流行。
在C和C++中,逗號運算子,在允許多個指定出現在一個單一語句上類似於並列指定,寫a=1,b=2替代a,b=1,2。
這主要用在for迴圈中,在其他語言比如Go中,被替代為並列指定[15]。
但是上述C++代碼不確保完全的同時性,因為代碼a=b,b=a+1的右側項是在左側項之後運算的。
在語言如Python中,a,b=b,a+1將並行的指定兩個變數,使用最初的a的值來計算新b的值.
指定與等式符號編輯
參見:關係運算子§ 與賦值運算子的混淆情況
標記法編輯
參見:關係運算子§ 標準關係運算子
複製分配的兩個最常見的表示形式是等號(=)和冒號等於(:=)。
這兩種形式都可以在語義上表示賦值語句或設定運算子(它也具有值),這取決於語言用法。
variable=expression
Fortran,PL/I,C(和衍生者比如C++,Java等),Bourneshell,Python,Go(指定預先聲明的變數),R,WindowsPowerShell等。
variable :=expression
ALGOL(和衍生者),Simula,CPL,BCPL,Pascal[16](和衍生者比如Modula),Mary(英語:Mary(programminglanguage)),PL/M(英語:PL/M),Ada,Smalltalk,Eiffel[17][18],Oberon,Dylan[19],Seed7(英語:Seed7),Go(聲明和定義變數的捷徑)[20],Io,AMPL,ML[21],AutoHotkey等。
其他可能性包括左箭頭或關鍵字,但還有其他更罕見的變體:
variable<
(setfvariableexpression)
CommonLisp
(set!variableexpression)
Scheme[23][24][25]setvariableexpression
Tcl
expressionvariable !
Forth
另見編輯
設定運算子
算符(編程)(英語:Operator(programming))
名字繫結
合一
不可變物件
常數(電腦編程)(英語:const(computerprogramming))註釋編輯
^1.01.11.2Crossingborders:ExplorefunctionalprogrammingwithHaskell網際網路檔案館的存檔,存檔日期November19,2010,.,byBruceTate
^Mitchell,JohnC.Conceptsinprogramminglanguages.CambridgeUniversityPress.2003:23[3January2011].ISBN 978-0-521-78098-8.
^ImperativeProgrammingLanguages(IPL)(PDF).gwu.edu.[20April2018].(原始內容存檔(PDF)於2021-01-18).
^JohnC.Mitchell.Conceptsinprogramminglanguages.CambridgeUniversityPress.2003:81–82[3January2011].ISBN 978-0-521-78098-8.
^Ruediger-MarcusFlaig.BioinformaticsprogramminginPython:apracticalcourseforbeginners.Wiley-VCH.2008:98–99[25December2010].ISBN 978-3-527-32094-3.(原始內容存檔於2017-04-19).
^CLHS:MacroSETF,PSETF.CommonLispHyperspec.LispWorks.[23April2019].(原始內容存檔於2020-11-30).
^TheGoProgrammingLanguageSpecification:Assignments(頁面存檔備份,存於網際網路檔案館)
^INMOSLimited(編).Occam2ReferenceManual.NewJersey:PrenticeHall.1988.ISBN 0-13-629312-3.
^Wall,Larry;Christiansen,Tom;Schwartz,RandalC.PerlProgrammingLanguage2.Cambridge:O´Reilly.1996.ISBN 1-56592-149-6.
^Lutz,Mark.PythonProgrammingLanguage2.Sebastopol:O´Reilly.2001.ISBN 0-596-00085-5.
^Thomas,David;Hunt,Andrew.ProgrammingRuby:ThePragmaticProgrammer'sGuide.UpperSaddleRiver:AddisonWesley.2001.ISBN 0-201-71089-7.
^D.W.Barronetal.,"ThemainfeaturesofCPL",ComputerJournal6:2:140(1963).fulltext(subscription)Archive.is的存檔,存檔日期2012-07-07
^PEP3132--ExtendedIterableUnpacking.legacy.python.org.[20April2018].(原始內容存檔於2016-05-13).
^Destructuringassignment.MDNWebDocs.[20April2018].(原始內容存檔於2021-02-10).
^EffectiveGo(頁面存檔備份,存於網際網路檔案館):for(頁面存檔備份,存於網際網路檔案館),
"Finally,Gohasnocommaoperatorand++and--arestatementsnotexpressions.Thusifyouwanttorunmultiplevariablesinaforyoushoulduseparallelassignment(althoughthatprecludes++and--)."
^Moore,Lawrie.FoundationsofProgrammingwithPascal.NewYork:JohnWiley&Sons.1980.ISBN 0-470-26939-1.
^Meyer,Bertrand.EiffeltheLanguage.HemelHempstead:PrenticeHallInternational(UK).1992.ISBN 0-13-247925-7.
^Wiener,Richard.AnObject-OrientedIntroductiontoComputerScienceUsingEiffel.UpperSaddleRiver,NewJersey:PrenticeHall.1996.ISBN 0-13-183872-5.
^Feinberg,Neal;Keene,SonyaE.;Mathews,RobertO.;Withington,P.Tucker.DylanProgramming.Massachusetts:AddisonWesley.1997.ISBN 0-201-47976-1.
^TheGoProgrammingLanguageSpecification-TheGoProgrammingLanguage.golang.org.[20April2018].(原始內容存檔於2021-03-18).
^Ullman,JeffreyD.ElementsofMLProgramming:ML97Edition.EnglewoodCliffs,NewJersey:PrenticeHall.1998.ISBN 0-13-790387-1.
^Iverson,KennethE.AProgrammingLanguage.JohnWileyandSons.1962.ISBN 0-471-43014-5.(原始內容存檔於2009年6月4日).
^Dybvig,R.Kent.TheSchemeProgrammingLanguage:ANSIScheme.NewJersey:PrenticeHall.1996.ISBN 0-13-454646-6.
^Smith,JerryD.IntroductiontoScheme.NewJersey:PrenticeHall.1988.ISBN 0-13-496712-7.
^Abelson,Harold;Sussman,GeraldJay;Sussman,Julie.StructureandInterpretationofComputerPrograms.NewJersey:McGraw-Hill.1996.ISBN 0-07-000484-6.
取自「https://zh.wikipedia.org/w/index.php?title=指定敘述&oldid=69947055」
延伸文章資訊
- 1性別指定- 维基百科,自由的百科全书
性別指定(英語:sex assignment),是根據出生時檢查性別特徵以確定嬰兒的性別。在大多數分娩中,親屬、助產士、護士或醫生在嬰兒分娩時和進行性別指定時都会检查 ...
- 2designate中文(繁體)翻譯:劍橋詞典
This area of the park has been specially designated for children. 公園的這個區域被指定為兒童活動區。 They official...
- 3assigned 的中文翻譯| 英漢字典
assigned 指定來源(2): Network Terminology [netterm] assigned 指定賦值來源(3): The Collaborative Internation...
- 4分辨多益常見單字delegate, designate, appoint, assign 的差別
☞ designate 和appoint 較常用的中文字義,前者是「指定」,後者是「任命」,都是正式地、官方地將某人放在特定的職位上,進而去履行那個位置要做的工作 ...
- 5assign - Yahoo奇摩字典搜尋結果
assigns. assign的名詞複數 ; assigned. assign的動詞過去式、過去分詞 ; assigned numbers · 【電腦】指定號碼(RFC現有文件指定編號) ; a...