Twoja definicja nie wydaje mi się poprawna. Idiom to sposób na napisanie czegoś, co może, ale nie musi, być możliwe w innych językach, ale jest to powszechne w tym języku. Zwykle jest krótszy niż alternatywa, ale tak naprawdę nie jest to wymóg.
Łatwiej byłoby to wyjaśnić, mówiąc o tym, co nie jest idiomatyczne. W C ++ napisanie:
Foo* p = SomeThingThatReturnsAFooPointer(arg, param, x, y);
if(p)
{
// whatever
}
Jeszcze bardziej idiomatyczne jest pisanie:
Foo* p;
if(p = SomeThingThatReturnsAFooPointer(arg, param, x, y))
{
// whatever
}
Ten kod robi dokładnie to samo - niektórzy ludzie, którzy są nowicjuszami w C ++, mogą go przeczytać jako testowanie, aby sprawdzić, czy p jest równe zwrotowi funkcji, ale to nie to, co robi.
Porównaj z tym, co ktoś mógłby napisać, bardzo nieidiomatycznie, kto przyszedł z innego języka:
Foo* p = SomeThingThatReturnsAFooPointer(arg, param, x, y);
if(p !=NULL)
{
// whatever
}
Zobaczysz również te rzeczy odrzucone jako nie idiomatyczne:
if (x>0)
return true;
else
return false;
Ponieważ podejście idiomatyczne jest
return (x>0);
Nie-idiomatyczne sposoby nie są złe, ale zwykle wymagają dłuższego pisania i zawsze wymagają dłuższego czytania, dla tych, którzy znają idiomy. Jeśli nazywam cię „chłopcem, który płakał wilkiem” i znasz tę historię, jest to szybsze niż wyjaśnienie, w jaki sposób fałszywe alarmy powodują, że ludzie cię ignorują. Problem oczywiście polega na tym, że nie znasz tej historii i nie wiesz, co wilki mają wspólnego z tym, o czym mówimy. Podobnie może być problem, jeśli nigdy wcześniej nie widziałeś return x<y;
i naprawdę nie wiesz, co robi.