Idiom (programmering)

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 13 februari 2020; verifiering kräver 1 redigering .

Ett programmeringsspråk är ett stabilt sätt att uttrycka någon sammansatt konstruktion i ett eller flera programmeringsspråk . Ett idiom är ett mönster för att lösa ett problem, skriva en algoritm eller datastruktur genom att kombinera inbyggda språkelement.

Ett formspråk kan anses vara det mest låga designmönster som tillämpas i skärningspunkten mellan design och kodning i ett programmeringsspråk. Ett idiom föreskriver ett specifikt sätt att implementera vissa detaljer och relationerna mellan dem med hjälp av ett visst språk. Uppsättningen av idiom beror på programmeringsspråket, och samma idiom kan se olika ut på två olika språk, eller så behövs det kanske inte på ett av dem [1] .

Ett idiom kan vara en reproduktion i ett språk av element i ett semantiskt annorlunda språk, som i detta språk också kan vara tillämpliga, men som inte provoceras av språket självt (det vill säga de är inte bland dess idiom). Ur detta perspektiv ses många mönster i objektorienterad design som idiomatiska reproduktioner av element i funktionella språk [2] [3] .

Exempel på enkla idiom

Öka

I språk som BASIC är formspråket för att öka värdet på en variabel med en:

i = i + 1

Förkortad version på C-liknande språk:

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

Pascal innehåller en liknande tilldelningsprocedur:

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

Värdebyte (swap)

På de flesta språk ser utbytet av värden mellan två variabler ut så här:

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

I Perl ser detta mer elegant ut:

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

Endless Loop

Pascal :

medan sant börjar do_something ( ) ; slut ;

I C-liknande språk finns det många sätt att organisera oändliga loopar, men följande exempel visar detta på det mest uppenbara sättet:

för (;;) { göra_något (); }

Perl stöder både C-syntax och andra varianter:

göra_något () medan ( 1 ); # förkortad oändlig loop while ( 1 ) { do_something () }; #liknande # Använda ett "naket block" och redo-operatorn { do_something (); göra om ; }

Ada :

loop do_something ; end -loop ;

Python :

medan sant : gör_något ()

Välja från en associativ array

Många språk har en implementering av en associativ array , den så kallade. hashtabell .

Associativ arrayimplementering i Perl :

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

Kritik

Författaren till boken Learn Ruby The Hard Way, Zed Shaw, noterar att inställningen till idiom i utvecklargemenskaper tyder på att användningen av idiom bör kategoriseras som sedvänjor , eftersom när man skriver på naturligt språk, vilket kräver klarhet i presentationen, bör idiom undvikas [4] . Han ger följande exempel från Ruby Styleguide [5] :

arr = [ 1 , 2 , 3 ] # dåligt för elem i arr do sätter elem slut # bra arr . varje { | element | sätter elem }

Användningen av en for -loop , enligt den officiella Ruby -stilen , är utfasad, och .each. Shaws ståndpunkt är att elever i programmeringsspråk ska lära sig inte bara idiom för ett visst programmeringsspråk, utan också alternativa sätt att koda - detta undviker indoktrinering och underlättar övergången till andra språk.

Se även

Länkar

Anteckningar

  1. Buschmann, F. och Meunier, R. och Rohnert, H. och Sommerlad, P. och Stal, M. Pattern-Oriented Software Architecture, A System of Patterns. - Wiley, 2013. - 350 sid. — ISBN 9781118725269 .
  2. Designmönster i Haskell
  3. Peter Norvig - Designmönster i dynamiska språk (bilder)
  4. Zed A. Shaw, programmeringsspråk har sociala moraler inte idiom  (nedlänk)
  5. Ruby Styleguide