Idiom (programmering)

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 13. februar 2020; verifikation kræver 1 redigering .

Et programmeringssprog er en stabil måde at udtrykke en sammensat konstruktion på i et eller flere programmeringssprog . Et formsprog er et mønster til at løse et problem, skrive en algoritme eller datastruktur ved at kombinere indbyggede sprogelementer.

Et formsprog kan betragtes som det mest lave designmønster, der anvendes i skæringspunktet mellem design og kodning i et programmeringssprog. Et formsprog foreskriver en specifik måde at implementere visse detaljer og forholdet mellem dem ved hjælp af et bestemt sprogs midler. Sættet af formsprog afhænger af programmeringssproget, og det samme formsprog kan se anderledes ud på to forskellige sprog, eller det er måske ikke nødvendigt i et af dem [1] .

Et formsprog kan være en gengivelse i et sprog af elementer fra et semantisk anderledes sprog, som i dette sprog også kan være anvendelige, men som ikke er fremprovokeret af sproget selv (det vil sige, at de ikke er blandt dets formsprog). Fra dette perspektiv ses mange mønstre i objektorienteret design som idiomatiske reproduktioner af elementer af funktionelle sprog [2] [3] .

Eksempler på simple idiomer

Forøg

I sprog som BASIC er formsproget for at øge værdien af ​​en variabel med én:

i = i + 1

Forkortet version på C-lignende sprog:

i += 1 ; /* i = i + 1; */ ++ i ; /* samme resultat */ i ++ ; /* samme resultat */

Pascal indeholder en lignende tildelingsprocedure:

i := i + 1 ; Inc ( i ) ; (*samme resultat*)

Værdiudveksling (swap)

På de fleste sprog ser udvekslingen af ​​værdier mellem to variabler sådan ud:

temp = a ; a = b _ b = temp ;

I Perl ser dette mere elegant ud:

( $a , $b ) = ( $b , $a );

Endless Loop

Pascal :

mens sandt begynder do_something ( ) ; ende ;

I C-lignende sprog er der mange måder at organisere uendelige loops på, men det følgende eksempel viser dette på den mest indlysende måde:

for (;;) { gøre_noget (); }

Perl understøtter både C-syntaks og andre varianter:

gøre_noget () mens ( 1 ); # forkortet uendelig loop while ( 1 ) { do_something () }; #lignende # Brug af en "nøgen blok" og redo-operatoren { do_something (); gentage ; }

Ada :

sløjfe gør_noget ; ende -løkke ;

Python :

mens det er sandt : gør_noget ()

Valg fra et associativt array

Mange sprog har en implementering af et associativt array , det såkaldte. hash tabel .

Associativ array-implementering i Perl :

mine %elements = kort { $_ => 1 } @elements ;

Kritik

Forfatteren til bogen Learn Ruby The Hard Way, Zed Shaw, bemærker, at holdningen til idiomer i udviklerfællesskaber tyder på, at brugen af ​​idiomer bør kategoriseres som sædvaner , da når man skriver i naturligt sprog, som kræver klarhed i præsentationen, bør idiomer undgås [4] . Han giver følgende eksempel fra Ruby Styleguide [5] :

arr = [ 1 , 2 , 3 ] # dårligt for elem i arr do sætter elem ende #godt arr . hver { | element | sætter elem }

Brugen af ​​en for -løkke i henhold til den officielle Ruby -stil er forældet, og .each. Shaws holdning er, at elever i programmeringssprog ikke kun skal lære et bestemt programmeringssprogs formsprog, men også alternative måder at kode på - dette undgår indoktrinering og letter overgangen til andre sprog.

Se også

Links

Noter

  1. Buschmann, F. og Meunier, R. og Rohnert, H. og Sommerlad, P. og Stal, M. Pattern-Oriented Software Architecture, A System of Patterns. - Wiley, 2013. - 350 s. — ISBN 9781118725269 .
  2. Designmønstre i Haskell
  3. Peter Norvig - Designmønstre i dynamiske sprog (slides)
  4. Zed A. Shaw, programmeringssprog har sociale moraler ikke idiomer  (downlink)
  5. Ruby Styleguide