Idiom (programare)

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 13 februarie 2020; verificarea necesită 1 editare .

Un limbaj de programare este o modalitate stabilă de a exprima un construct compus în unul sau mai multe limbaje de programare . Un idiom este un model pentru rezolvarea unei probleme, scrierea unui algoritm sau a unei structuri de date prin combinarea elementelor de limbaj încorporate.

Un idiom poate fi considerat modelul de proiectare de cel mai scăzut nivel aplicat la intersecția dintre proiectare și codificare într-un limbaj de programare. Un idiom prescrie o modalitate specifică de a implementa anumite detalii și relațiile dintre ele folosind mijloacele unei anumite limbi. Setul de idiomuri depinde de limbajul de programare, iar același idiom poate arăta diferit în două limbi diferite, sau poate să nu fie necesar într-una dintre ele [1] .

Un idiom poate fi o reproducere într-o limbă a unor elemente dintr-o limbă diferită din punct de vedere semantic, care pot fi aplicabile și în această limbă, dar nu sunt provocate de limba în sine (adică nu sunt printre idiomurile sale). Din această perspectivă, multe modele în designul orientat pe obiecte sunt văzute ca reproduceri idiomatice ale elementelor limbajelor funcționale [2] [3] .

Exemple de idiomuri simple

Incrementare

În limbi precum BASIC , expresia de creștere a valorii unei variabile cu una este:

i = i + 1

Versiune prescurtată în limbaje asemănătoare C :

i += 1 ; /* i = i + 1; */ ++ i ; /* acelasi rezultat */ i ++ ; /* acelasi rezultat */

Pascal conține o procedură de atribuire similară:

i := i + 1 ; Inc ( i ) ; (*acelasi rezultat*)

Schimb de valoare (swap)

În majoritatea limbilor, schimbul de valori între două variabile arată astfel:

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

În Perl , aceasta arată mai elegant:

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

Endless Loop

Pascal :

în timp ce true do begin do_something () ; sfârşitul ;

În limbajele asemănătoare C , există multe moduri de a organiza bucle infinite, dar următorul exemplu arată acest lucru în cel mai evident mod:

pentru (;;) { face_ceva (); }

Perl acceptă atât sintaxa C, cât și alte variante:

face_ceva () în timp ce ( 1 ); # buclă infinită scurtată while ( 1 ) { face_something () }; # asemănătoare # Folosind un „bloc gol” și operatorul redo { do_something (); reface ; }

Ada :

bucla face_ceva ; buclă de capăt ;

Python :

în timp ce este adevărat : fă_ceva ()

Selectarea dintr-un tablou asociativ

Multe limbi au o implementare a unui tablou asociativ , așa-numita. masa hash .

Implementarea matricei asociative în Perl :

my %elements = map { $_ => 1 } @elements ;

Critica

Autorul cărții Learn Ruby The Hard Way, Zed Shaw, observă că atitudinea față de idiomuri în comunitățile de dezvoltatori sugerează că utilizarea idiomurilor ar trebui clasificată drept moravuri , deoarece atunci când scrieți în limbaj natural, care necesită claritate în prezentare, idiomurile ar trebui fi evitat [4 ] . El dă următorul exemplu din Ruby Styleguide [5] :

arr = [ 1 , 2 , 3 ] # rău pentru elem în arr do pune capăt elem # bun arr . fiecare { | element | pune elem }

Utilizarea unei bucle for , conform stilului oficial Ruby , este depreciată, iar .each. Poziția lui Shaw este că studenții limbajelor de programare ar trebui să învețe nu numai idiomurile unui anumit limbaj de programare, ci și modalități alternative de codificare - acest lucru evită îndoctrinarea și facilitează tranziția către alte limbi.

Vezi și

Link -uri

Note

  1. Buschmann, F. și Meunier, R. și Rohnert, H. și Sommerlad, P. și Stal, M. Pattern-Oriented Software Architecture, A System of Patterns. - Wiley, 2013. - 350 p. — ISBN 9781118725269 .
  2. Design Patterns în Haskell
  3. Peter Norvig - Modele de proiectare în limbaje dinamice (diapozitive)
  4. Zed A. Shaw, Limbajele de programare au moralități sociale, nu idiomuri  (link în jos)
  5. Ghid de stil  Ruby