指定敘述- 维基百科,自由的百科全书

文章推薦指數: 80 %
投票人數:10人

在程序設計中,指定敘述(英語: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<variable BETA,R putexpressionintovariable LiveCode(英語:LiveCode) 一些面向運算式的語言比如Lisp和Tcl,對所有語句(包括賦值)統一使用前綴(或後綴)語法。

(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」



請為這篇文章評分?