La tua definizione non mi sembra corretta. Un linguaggio è un modo di scrivere qualcosa che può o non può essere possibile in altre lingue, ma che è un luogo comune 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 ++, è abbastanza idiomatico 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: alcune persone che non conoscono C ++ potrebbero leggerlo come test per vedere se p è uguale a ciò che restituisce la funzione, ma non è quello che fa.
Confronta con quello che qualcuno potrebbe scrivere, in modo molto non idiomatico, che proviene da un'altra lingua:
Foo* p = SomeThingThatReturnsAFooPointer(arg, param, x, y);
if(p !=NULL)
{
// whatever
}
Vedrai anche queste cose come non idiomatiche:
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 impiegano più tempo a scrivere e impiegano sempre più tempo a leggere, per coloro che conoscono gli idiomi. Se ti chiamo "il ragazzo che piangeva lupo" e conosci la storia, è più veloce che se ti spiegassi come i falsi allarmi inducono le persone 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 l'hai mai visto return x<y;
prima e davvero non sai cosa fa.