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.