En blok (også kaldet kodeblok , kommandoblok , instruktionsblok ) i programmering er et logisk grupperet sæt af på hinanden følgende instruktioner i programmets kildekode , er grundlaget for det strukturerede programmeringsparadigme .
Blokke tjener til at begrænse omfanget af variabler og funktioner, og giver dig også adgang til en blok af instruktioner som en enkelt instruktion, de kan være tomme eller indlejrede i hinanden.
En blok i kode sammenlignes nogle gange med et afsnit i tekst, selvom disse begreber har betydelige forskelle.
På den ene side er en blok et ekstremt simpelt programmeringskoncept, på den anden side er det i nogle programmeringssprog, for eksempel i JavaScript , forbundet med et stort antal subtile specifikke funktioner, som nogle gange komplicerer dens drift.
For at vælge blokke bruges specielle programmeringssprogskonstruktioner. For eksempel bruger den C -lignende familie af sprog ( C , C++ , Java ) og JavaScript krøllede seler ( «{»og «}»). ALGOL - baserede sprog bruger nøgleordene beginog end( operatorparenteser ). I Lisp - baserede sprog bruges S-udtryk ( lambda, letosv.) I Python er blokke defineret ved forskelle i indrykning af kodelinjer fra venstre kant af begyndelsen af linjen (normalt 4 mellemrumstegn).
På mange sprog bruges blokke til at begrænse omfanget. Så for eksempel vil en variabel ierklæret inde i en blok være "synlig" i den blok (inklusive indlejrede blokke), men vil ikke være "synlig" uden for den, så en almindeligt brugt identifikator ikan bruges mange steder i et program uden at forårsage fejl. Det samme gælder for navnene på procedurer, funktioner, på nogle sprog - klasser.
Block scope har på nogle sprog en ret ikke-triviel adfærd. For eksempel i JavaScript -sproget afhænger dets handling af flere omstændigheder.
På sprogene i Smalltalk -familien er blokke objekter med alle de tilsvarende egenskaber.
I JavaScript svarer syntaksen af en blok til syntaksen for et objekts bogstaveligt tal, og semantikken af disse konstruktioner er bestemt af den eksterne kontekst - der hører til udtrykket, da især algoritmen til at bestemme semantik af den interne kontekst vil støde på uløselige uklarheder. I den ser instruktionen breakheller ikke etiketter uden for den funktion, hvor den anvendes direkte, hvilket kan tjene som et stærkt argument til fordel for implementering af do-udtryk i JavaScript .
Bloker inde i en funktion i C -sprog :
{ int a = 1 ; int b = 2 ; int c = a + b ; returnere c ; }Blok på Pascal -sprog :
begynde en := 5 ; b := a - 2 ; endeBlokeksempel i Transact-SQL :
BEGYNDE SET @a = 'f' HVIS @b = 1 SET @a = @a + ',f' ANDET HVIS @b = 2 SET @a = @a + ',e' ENDEJavaScript -blok uden en etiket:
{ konst a = 1 , b = 2 , c = a + b ; }En tom umærket blok indlejret i et sæt af umærkede JavaScript -blokke :
{{{{{{{{{{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}}} }} }}}}}En demonstration af en af JavaScript -blok scope-funktionerne :
{ lad a = 1 ; var b = 2 ; konsol . log ( b ) // 2 konsol . log ( a ) // 1 } konsol . log ( b ) // 2 konsol . log ( a ) //ReferenceError!På trods af funktionen demonstreret i det foregående eksempel, vil følgende JavaScript -kodeeksempel resultere i en syntaksfejl.
{ lad a = 1 ; var a = 1 ; }En blok i JavaScript med en etiket og afbrydelse af dens udførelse med en instruktion breakpå sin egen etiket (bemærk, at der ikke er nogen konflikt mellem etiketten og identifikatoren af samme navn):
x : { const x = 0 ; konsol . log ( x ); bryde x ; konsol . log ( x ); }Forskellig semantik {...}i JavaScript -sproget (fejlagtigt indhold bruges til at demonstrere definitionen af semantik i den eksterne kontekst):
// Kodeblok { _ : 1 , _ : 2 , } + []; // Syntaks fejl! // Kodeblok eval ( '{ _: 1, _: 2, }' ) // SyntaxError! eval ( '{ valueOf: _ => Math.random() }' ) /*Uopløselig tvetydighed for den interne kontekst semantikalgoritme*/ // Objekt literal eval ( '({ _: 1, _: 2, })' ) eval ( '+{ valueOf: _ => Math.random() }' ) // En del af pilefunktionen syntaks (() => { _ : 1 , _ : 2 , })() // SyntaxError! // Objekt literal (() => ({ _ : 1 , _ : 2 , }))()Demonstration af "blindheden" af instruktionen af JavaScriptbreak -sproget :
x : { konsol . log ( 1 ); (() => { break x ; // SyntaxError! })(); konsol . log ( 2 ); }