Ваше визначення мене не вважає правильним. Ідіома - це спосіб написання чогось, що може бути, а може і не бути можливим в інших мовах, але це звично для цієї мови. Зазвичай це коротше, ніж альтернатива, але це насправді не є вимогою.
Це може бути простіше пояснити, якщо говорити про те, що не є ідіоматичним. На мові C ++ досить ідіоматично писати:
Foo* p = SomeThingThatReturnsAFooPointer(arg, param, x, y);
if(p)
{
// whatever
}
Ще ідіоматичніше писати:
Foo* p;
if(p = SomeThingThatReturnsAFooPointer(arg, param, x, y))
{
// whatever
}
Цей код робить саме те саме - деякі люди, які не знайомі з C ++, можуть прочитати його як тестування, щоб побачити, чи p дорівнює тому, що функція повертає, але це не те, що робить.
Порівняйте те, що хтось може написати, дуже неідіоматично, хто прийшов з іншої мови:
Foo* p = SomeThingThatReturnsAFooPointer(arg, param, x, y);
if(p !=NULL)
{
// whatever
}
Ви також побачите, що цей матеріал вибивається як недіотичний:
if (x>0)
return true;
else
return false;
Тому що ідіоматичний підхід є
return (x>0);
Неідіоматичні способи не є помилковими, але вони зазвичай займають більше часу, а для читання завжди потрібно більше часу для тих, хто знає ідіоми. Якщо я називаю вас "хлопчиком, який плакав вовка", і ви знаєте історію, це швидше, ніж якщо б я пояснив, як помилкові тривоги змушують людей ігнорувати вас. Проблема, звичайно, полягає в тому, якщо ви не знаєте історії і не знаєте, що вовки мають спільне з тим, про що ми говоримо. Так само це може бути проблемою, якщо ви ніколи раніше не бачились return x<y;
і справді не знаєте, що це робить.