Idiomatyczny w językach naturalnych to tyle co "tak by powiedział native speaker". Przekładając na język programowania, idiomatyczny kod to taki kod który wygląda jakby był napisany przez zawodowego programistę z dużym doświadczeniem w stosowaniu danego języka +- biblioteki.
Oczywiście ile native speakerów tyle wypowiedzi, więc idiomatyzm języka naturalnego to pewna wypadkowa. Przykładowo wsiadasz w taksówkę i mówisz "na centralny". Osoba ucząca się języka mogłaby powiedzieć "chciałbym dojechać do dworca centralnego", to też jest poprawne ale nazbyt długie i wymagające większego wysiłku. Idiomatyzm zależy też od kontekstu nastolatki mają swój slang, dresy swój.
Przenosząc to na język programowania należy oczekiwać innych idiomów u gamedev'ów a innych u korpodev'ów klepiących CRUD'y.
Przykład najprostszego idiomu w języku Java to iteracja po List<String>
, osoba niezaznajomiona z językiem może napisać to tak:
for (int i = 0; i < list.size(); i++) {
foo(list.get(0));
}
Idiomatyczny zapis to użycie pętli for-each:
for (String s : list) {
foo(s);
}
Inny przykład z Javy to sortowanie listy, najbardziej idiomatyczny sposób to Collections.sort(...)
.
Od kiedy Java 8 wprowadziła strumienie, sporo operacji typu filtrowanie czy mapowanie zapisuje się idiomatycznie przy ich użyciu.
Oprócz idiomów Javy mamy też do czynienia z idiomami bibliotecznymi. W tej chwili nie mam żadnego sensownego przykładu w głowie więc musi zostać bez przykładu.
Ostatnia strona idiomów języka to sztuczki i kruczki, przykładowo w Javie można tak (zanim wprowadzili List.of(...)
):
new ArrayList<String>() {{
put("foo");
put("bar");
}};
Jest to bardziej trick niż idom, i ma prawo spotkać się z krytyką na code review.