Ett block (även kallat kodblock , kommandoblock , instruktionsblock ) i programmering är en logiskt grupperad uppsättning av på varandra följande instruktioner i programmets källkod , är grunden för det strukturerade programmeringsparadigmet .
Block tjänar till att begränsa omfattningen av variabler och funktioner, och låter dig också komma åt ett block med instruktioner som en enda instruktion, de kan vara tomma eller kapslade inuti varandra.
Ett block i kod jämförs ibland med ett stycke i text, även om dessa begrepp har betydande skillnader.
Å ena sidan är ett block ett extremt enkelt programmeringskoncept, å andra sidan, i vissa programmeringsspråk, till exempel i JavaScript , är det associerat med ett stort antal subtila specifika funktioner, vilket ibland komplicerar dess funktion.
För att välja block används speciella programmeringsspråkskonstruktioner. Till exempel använder den C -liknande språkfamiljen ( C , C++ , Java ) och JavaScript lockiga hängslen ( «{»och «}»). ALGOL -baserade språk använder nyckelorden beginoch end( operatorparenteser ). I Lisp - baserade språk används S-uttryck ( lambda, letetc.) I Python definieras block av skillnader i indragningen av kodrader från den vänstra kanten av radens början (vanligtvis 4 mellanslag).
På många språk används block för att begränsa omfattningen. Så till exempel kommer en variabel isom deklareras inuti ett block att vara "synlig" i det blocket (inklusive kapslade block), men kommer inte att vara "synlig" utanför det, så en vanlig identifierare ikan användas på många ställen i ett program utan att orsaka fel. Detsamma gäller namnen på procedurer, funktioner, på vissa språk - klasser.
Block scope har på vissa språk ett ganska icke-trivialt beteende. Till exempel i JavaScript -språket beror dess åtgärd på flera omständigheter.
På språken i Smalltalk- familjen är block objekt med alla motsvarande funktioner.
I JavaScript liknar syntaxen för ett block syntaxen för ett bokstavligt objekt, och semantiken för dessa konstruktioner bestäms av det externa sammanhanget - som hör till uttrycket, eftersom i synnerhet algoritmen för att bestämma semantik av det interna sammanhanget kommer att stöta på olösliga oklarheter. I den ser instruktionen breakinte heller etiketter utanför funktionen där den appliceras direkt, vilket kan fungera som ett starkt argument till förmån för implementeringen av göra-uttryck i JavaScript .
Blockera inuti en funktion i C- språk :
{ int a = 1 ; int b = 2 ; int c = a + b ; returnera c ; }Block på Pascal- språket :
börja en := 5 ; b := a - 2 ; slutetBlockexempel i Transact-SQL :
BÖRJA SET @a = 'f' OM @b = 1 SET @a = @a + ',f' ANNAT OM @b = 2 SET @a = @a + ',e' SLUTETJavaScript -block utan etikett:
{ const a = 1 , b = 2 , c = a + b ; }Ett tomt omärkt block kapslat i en uppsättning omärkta JavaScript -block :
{{{{{{{{{{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}}}}}} }}}}}En demonstration av en av JavaScript -blockomfångsfunktionerna :
{ låt a = 1 ; var b = 2 ; konsol . log ( b ) // 2 konsol . log ( a ) // 1 } konsol . log ( b ) // 2 konsol . log ( a ) //ReferenceError!Trots funktionen som visades i föregående exempel kommer följande JavaScript -kodexempel att resultera i ett syntaxfel.
{ låt a = 1 ; var a = 1 ; }Ett block i JavaScript med en etikett och avbryter dess exekvering med en instruktion breakpå sin egen etikett (observera att det inte finns någon konflikt mellan etiketten och identifieraren med samma namn):
x : { const x = 0 ; konsol . log ( x ); bryta x ; konsol . log ( x ); }Olika semantik {...}i JavaScript- språket (felaktigt innehåll används för att visa definitionen av semantik av det externa sammanhanget):
// Kodblock { _ : 1 , _ : 2 , } + []; // Syntaxfel! // Kodblocksutvärdering ( '{ _: 1, _: 2, }' ) // SyntaxError! eval ( '{ valueOf: _ => Math.random() }' ) /*Olöslig tvetydighet för den interna kontextsemantiska algoritmen*/ // Objekt literal eval ( '({ _: 1, _: 2, })' ) eval ( '+{ valueOf: _ => Math.random() }' ) // Del av pilfunktionen syntax (() => { _ : 1 , _ : 2 , })() // SyntaxError! // Objekt bokstavlig (() => ({ _ : 1 , _ : 2 , }))()Demonstration av "blindheten" i instruktionen av JavaScript-break språket :
x : { konsol . log ( 1 ); (() => { break x ; // SyntaxError! })(); konsol . log ( 2 ); }