Che cosa è idiomatico?

15

Capisco che un "idioma" sia un'operazione o uno schema comune che in una particolare lingua non è semplificato dalla sintassi del linguaggio core, come l'incremento dei numeri interi:

i = i + 1;

In C ++, questo idioma è semplificato da un operatore:

++i;

Tuttavia, quando qualcuno usa il termine "idiomatico", non sono sicuro di come comprenderlo. Cosa rende un pezzo di codice "idiomatico"?

    
posta void.pointer 20.07.2011 - 17:59
fonte

7 risposte

20

Un modo idioma di scrivere un codice è quando lo scrivi in un modo molto specifico a causa di idiomi specifici della lingua che altri linguaggi non hanno.

Ad esempio, in C ++, sfruttare l'idioma RAII porta a modi di scrivere risorse di gestione del codice C ++ che sono idiomatiche.

Un altro esempio potrebbe utilizzare le list comprehensions in Python per generare liste. È idiomatico perché avresti usato la comprensione delle liste in Python idiomatico ma avresti potuto fare lo stesso usando una funzione di generatore in qualsiasi altra lingua o persino in Python.

Spesso, qualcuno che prova una nuova lingua senza usare gli idiomi specifici di questa lingua non scrive codice idiomatico.

    
risposta data 20.07.2011 - 18:09
fonte
11

Definizione normale

Using, containing, or denoting expressions that are natural to a native speaker

Definizione di programmazione

Using, containing, or denoting expressions that are natural to a [Insert Language] programmer

    
risposta data 20.07.2011 - 18:07
fonte
6

Idiomatico nel contesto della programmazione può essere generalmente definito come "il modo più naturale di esprimere qualcosa in una lingua"

Vedo la parola "idiomatico" particolarmente interessante in Ruby. In Ruby ci sono enormi capacità di meta-programmazione e per scrivere codice idiomatico di Ruby, devi usarli di solito.

Si noti che solo perché un pezzo di codice è idiomatico, non significa che sia pulito o addirittura conciso. Molte volte devi fare dei compromessi.

Quindi, in sostanza, il termine idiomatico si riferisce comunemente al modo più comune di scrivere qualcosa in una lingua, spesso includendo "slang" (espressioni idiomatiche). Se un pezzo di codice non è idiomatico, può essere perfettamente leggibile, conciso, pulito e corretto, ma può sembrare / sembrare imbarazzante nella lingua utilizzata. È una preferenza per il gusto se riscrivere un pezzo di codice in modo idiomatico sia effettivamente una buona cosa e debba essere valutato caso per caso

L'inglese idiomatico, ad esempio, può dipendere dalla regione. L'uso della parola bum è probabilmente richiesto per l'inglese idiomatico del Regno Unito, mentre butt è più appropriato per l'inglese americano. (Non conosco tristemente l'inglese britannico: /)

    
risposta data 20.07.2011 - 22:43
fonte
3

Il miglior esempio che riesca a escogitare, in cima alla mia testa, per qualcosa di idiomatico, viene da Ruby.

In molte lingue, puoi eseguire l'iterazione con:

for( start; end; increment){
    code;
}

O qualcosa di molto simile. Molte lingue hanno anche un costrutto foreach(x in SetOfXes) . Ma l'iterazione che è idiomatica per Ruby include cose come:

collection.each do |current|
  current.do_stuff
end

e persino

10.times do |x|
  puts x
end

Le vedo come idiomatiche perché rappresentano un modo di fare qualcosa che è meno comune e che rappresenta qualcosa al centro della filosofia del suo dominio. Ruby ha una filosofia sull'interazione con oggetti che, sebbene non unici, non è onnipresente.

Su una nota semantica, ogni volta che sento la parola idiomatica, il mio cervello completa automaticamente il pensiero come "idiomatico per ..." - Io lo analizzo solo in modo riflessivo in relazione a un argomento specifico.

    
risposta data 20.07.2011 - 18:37
fonte
2

Gli idiomi sono solitamente il modo migliore di esprimere una situazione comune e relativamente complessa in una lingua. L'incremento non è un idioma o qualcosa del genere. Usando il prefisso increment invece di postfix, si potrebbe argomentare di essere un idioma C ++.

Gli idiomi sono il modo migliore di usare una lingua, come determinato dagli utenti esperti. Un vero idioma C ++ sarebbe oggetti funzione. Un altro idioma sarebbe RAII. Non c'è niente nel linguaggio che ti dice che devi liberare risorse nel distruttore. Ma è idiomatico farlo. Un altro esempio sono i modelli: è idiota usare i modelli per, beh, tutto ciò che puoi, ma non c'è nulla che ti impedisca di usare l'ereditarietà.

    
risposta data 20.07.2011 - 18:43
fonte
2

La tua definizione non mi sembra corretta. Un idioma è un modo di scrivere qualcosa che può essere o non essere possibile in altre lingue, ma è normale in questa lingua. Di solito, è più breve dell'alternativa, ma non è davvero un requisito.

Potrebbe essere più facile spiegarlo parlando di ciò che non è idiomatico. In C ++, è piuttosto idioma scrivere:

Foo* p = SomeThingThatReturnsAFooPointer(arg, param, x, y);
if(p)
{
 // whatever
}

È ancora più idiomatico scrivere:

Foo* p; 
if(p = SomeThingThatReturnsAFooPointer(arg, param, x, y))
{
 // whatever
}

Questo codice fa esattamente la stessa cosa - alcuni che sono nuovi a C ++ potrebbero leggerlo come test per vedere se p è uguale a ciò che la funzione restituisce, ma non è quello che fa.

Confronta ciò che qualcuno potrebbe scrivere, molto poco idiomaticamente, che è venuto da un'altra lingua:

Foo* p = SomeThingThatReturnsAFooPointer(arg, param, x, y);
if(p !=NULL)
{
 // whatever
}

Vedrai anche questa roba come non idiomatica:

if (x>0)
  return true;
else
 return false;

Perché l'approccio idiomatico è

return (x>0);

I modi non idiomatici non sono sbagliati, ma di solito richiedono più tempo per scrivere e richiedono sempre più tempo per essere letti, per coloro che conoscono gli idiomi. Se ti chiamo "il ragazzo che gridava al lupo" e conosci la storia, è più veloce che se ti spiegassi come i falsi allarmi inducano la gente a ignorarti. Il problema, ovviamente, è se non conosci la storia e non sai cosa hanno a che fare i lupi con ciò di cui stiamo parlando. Allo stesso modo, può essere un problema se non hai mai visto return x<y; prima e davvero non sai cosa fa.

    
risposta data 20.07.2011 - 23:02
fonte
1

Quando esistono più modi di esprimere qualcosa, il modo più comune o comunemente accettato. Ad esempio, utilizzando un'istruzione strutturata in C anziché l'equivalente esatto usando le istruzioni goto.

    
risposta data 20.07.2011 - 20:11
fonte

Leggi altre domande sui tag