Rozumiem, że „idiom” to wspólna operacja lub wzorzec, którego w danym języku nie upraszcza składnia języka podstawowego, taka jak przyrost liczby całkowitej:
i = i + 1;
W języku C ++ ten idiom jest uproszczony przez operatora:
++i;
Kiedy jednak ktoś używa terminu „idiomatyczny”, nie jestem pewien, jak go zrozumieć. Co sprawia, że fragment kodu jest „idiomatyczny”?
Odpowiedzi:
Idiomatyczny sposób pisania kodu polega na pisaniu go w bardzo specyficzny sposób z powodu idiomów specyficznych dla języka, których nie mają inne języki.
Na przykład w C ++ wykorzystanie idiomu RAII prowadzi do sposobów pisania idiomatycznych zasobów zarządzających kodem C ++.
Innym przykładem może być użycie wyrażeń listowych w Pythonie do generowania list. Jest to idiomatyczne, ponieważ użyłbyś rozumienia listy w idiomatycznym Pythonie, ale możesz zrobić to samo, używając funkcji generatora w innym języku, a nawet w Pythonie.
Często ktoś, kto próbuje nowego języka bez użycia idiomów specyficznych dla tego języka, nie napisze kodu idiomatycznego.
źródło
TryAdd()
wDictionary
klasie Generic, aby najpierw sprawdzić,!Contains()
a następnie wywołaćAdd()
, byłoby to idiomatyczne? Korzystam z funkcji specyficznych dla metod rozszerzenia C #.Normalna definicja
Definicja programowania
źródło
Idiomatyczny w kontekście programowania można zwykle zdefiniować jako „najbardziej naturalny sposób wyrażenia czegoś w języku”
Widzę, że słowo idiomatic pojawia się szczególnie często w Ruby. W Ruby istnieją ogromne możliwości metaprogramowania i aby napisać idiomatyczny kod Ruby, zwykle musisz ich użyć.
Zauważ, że fakt, że fragment kodu jest idiomatyczny, nie oznacza, że jest czysty, a nawet zwięzły. Wiele razy musisz iść na kompromis.
Zasadniczo więc idiomatyczny najczęściej odnosi się do najczęstszego sposobu pisania czegoś w języku, często w tym „slang” (idiomy). Jeśli fragment kodu nie jest idiomatyczny, może być doskonale czytelny, zwięzły, czysty i poprawny, ale może wydawać się / wyglądać dziwnie w używanym języku. Preferowana jest preferencja co do tego, czy idiomatyczne przepisanie takiego fragmentu kodu byłoby w rzeczywistości dobrą rzeczą i musi być oceniane indywidualnie dla każdego przypadku
Na przykład idiomatyczny angielski może zależeć od regionu. Używanie tego słowa
bum
jest prawdopodobnie wymagane w przypadku idiomatycznego angielskiego w Wielkiej Brytanii, podczas gdybutt
jest bardziej odpowiednie dla angielskiego w USA. (Niestety nie znam dużo angielskiego angielskiego: /)źródło
Najlepszy przykład, jaki mogę wymyślić z góry, dla czegoś idiomatycznego, pochodzi od Ruby.
W wielu językach możesz iterować z:
Lub coś bardzo podobnego. Wiele języków ma również
foreach(x in SetOfXes)
konstrukcję. Ale iteracja idiomatyczna dla Ruby obejmuje takie rzeczy jak:i nawet
Widzę je jako idiomatyczne, ponieważ reprezentują sposób robienia czegoś, co jest mniej powszechne, a to stanowi coś w rdzeniu filozofii jego dziedziny. Ruby ma filozofię interakcji z przedmiotami, która, choć nie jest unikalna, nie jest wszechobecna.
Mówiąc semantycznie, za każdym razem, gdy słyszę słowo idiomatyczne, mój mózg automatycznie uzupełnia tę myśl jako „idiomatyczną do ...” - po prostu odruchowo analizuję ją jako odnoszącą się do konkretnego tematu.
źródło
collection.each do |current|
różniforeach(current in collection)
? Oba są konstrukcjami pętli ustawionymicurrent
dla każdego elementucollection
.Idiomy są zazwyczaj najlepszym możliwym sposobem wyrażenia wspólnej, stosunkowo złożonej sytuacji w języku. Zwiększanie nie jest idiomem ani niczym w tym rodzaju. Używając przyrostka prefiksu zamiast postfiksa, możesz argumentować, że jesteś idiomem C ++.
Idiomy to najlepszy sposób używania języka, określony przez ekspertów. Prawdziwym idiomem C ++ byłyby obiekty funkcyjne. Innym idiomem byłoby RAII. W tym języku nic nie mówi, że musisz uwolnić zasoby w destruktorze. Ale idiomatyczne jest to zrobić. Innym przykładem są szablony - idiomatyczne jest używanie szablonów do wszystkiego, co możesz, ale nic nie stoi na przeszkodzie, abyś nadmiernie korzystał z dziedziczenia.
źródło
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:
Jeszcze bardziej idiomatyczne jest pisanie:
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:
Zobaczysz również te rzeczy odrzucone jako nie idiomatyczne:
Ponieważ podejście idiomatyczne jest
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.źródło
if(Foo* p = SomeThingThatReturnsAFooPointer(arg, param, x, y))
Gdy istnieje wiele sposobów wyrażenia czegoś, najczęstszy lub powszechnie akceptowany sposób. Na przykład za pomocą instrukcji strukturalnej w C zamiast dokładnego odpowiednika za pomocą instrukcji goto.
źródło