Byłbym zainteresowany niektórymi przykładami z przykładu przed i po, przykładami nie idiomatycznymi i idiomatycznymi. Non-C# przykłady byłyby również dobre, jeśli wpadną na ten pomysł. Dzięki.Co to jest kod idiomatyczny?
Odpowiedz
Idiomatic oznacza przestrzeganie konwencji języka. Chcesz znaleźć najprostsze i najczęstsze sposoby wykonania zadania, a nie przenosić swoją wiedzę z innego języka.
non-idiomatyczne python za pomocą pętli ze append:
mylist = [1, 2, 3, 4]
newlist = []
for i in mylist:
newlist.append(i * 2)
idiomatycznym python przy użyciu wyrażeń listowych:
mylist = [1, 2, 3, 4]
newlist = [(i * 2) for i in mylist]
Kod idiomatyczny to kod, który wykonuje typowe zadanie w zwykły sposób dla danego języka. Jest podobny do wzoru projektu, ale w znacznie mniejszej skali. Idiomy różnią się znacznie w zależności od języka. Jednym idiomem w języku C# może być użycie iteratora do iterowania w kolekcji, zamiast przechodzenia przez nią. Inne języki bez iteratorów mogą polegać na idiomie pętli.
kilka przykładów:
zarządzania zasobami, nie idiomatyczne:
string content;
StreamReader sr = null;
try {
File.OpenText(path);
content = sr.ReadToEnd();
}
finally {
if (sr != null) {
sr.Close();
}
}
Idiomatic:
string content;
using (StreamReader sr = File.OpenText(path)) {
content = sr.ReadToEnd();
}
iteracji, nie idiomatycznym:
for (int i=0;i<list.Count; i++) {
DoSomething(list[i]);
}
również nie idiomatycznym:
IEnumerator e = list.GetEnumerator();
do {
DoSomenthing(e.Current);
} while (e.MoveNext());
Idiomatic:
foreach (Item item in list) {
DoSomething(item);
}
Filtrowanie, non-idiomatyczne:
List<int> list2 = new List<int>();
for (int num in list1) {
if (num>100) list2.Add(num);
}
idiomatyczne:
var list2 = list1.Where(num=>num>100);
Aparat ortodontyczny to idiomatyczna Java ;-) –
Praktycznie rzecz biorąc, oznacza to, pisania kodu w sposób spójny, czyli wszyscy programiści, którzy pracują na podstawie kodu powinny być zgodne te same konwencje podczas pisania podobnych konstrukcji kodu.
Tak więc idiomatyczny sposób jest sposobem, który pasuje do stylu innego kodu, sposób nie-idiomatyczny oznacza, że piszesz ten rodzaj funkcji, ale w inny sposób.
np. jeśli zapętlenie pewną liczbę elementów, można napisać pętlę na kilka sposobów:
for (int i = 0; i < itemCount; i++)
for (int i = 1; i <= itemCount; i++)
for (int i = 0; i < itemCount; ++i)
itp
Co najważniejsze jest to, że wybrany styl jest stosowany konsekwentnie. W ten sposób ludzie stają się bardzo obeznani i pewni, jak z nich korzystać, a kiedy szpiegujesz użycie, które wygląda inaczej, może być oznaką błędu, być może spowodowanego jednym błędem, np.
for (int i = 1; i < itemCount; i++)
Myślę, że myślałem, że idiomatyczny oznacza "najlepszy sposób" w przeciwieństwie do arbitralnego standardu. Ale myślę, że najlepszy sposób podlega kontekstowi. – MrBoJangles
W PHP I czasami spotkać kod jak:
foreach ($array as $value) {
$trimmed[] = trim($value);
}
return $trimmed;
Które idiomatically mogą być realizowane z:
return array_map('trim', $array);
- 1. Co to jest idiomatyczny sposób zwracania struktury lub błędu?
- 2. Co to jest kod stanu HTTP 000?
- 3. Co to jest MediaPlayer.OnInfoListener "kod 703"?
- 4. Co to jest un/managed DLL? Co to jest nie/zarządzany kod?
- 5. Co to jest "usuń to"?
- 6. Co to jest Serializable? Co to znaczy?
- 7. Co to jest idiomatyczny sposób wypełniania bufora dostarczanego przez użytkownika podczas odczytywania bajtów?
- 8. Co to jest "android.R.layout.simple_list_item_1"?
- 9. Co to jest CHAR_BIT?
- 10. Co to jest Routedata.Values [""]?
- 11. Co to jest []
- 12. Co to jest za kod stanu HTTP 308?
- 13. Co to jest kod koloru hex "Google Plus Red"?
- 14. Co to jest __FILE__?
- 15. Co to jest idiomatyczny sposób na wprowadzenie podwójnej pętli przez wektor w Clojure?
- 16. Co to jest idiomatyczny sposób obsługi leniwego kanału wejściowego w Haskell
- 17. Co to jest Pagel?
- 18. Co to jest _GLOBAL_OFFSET_TABLE?
- 19. Co to jest DetailsView.EnableModelValidation?
- 20. Co to jest NSPathStore2?
- 21. Co to jest czasownik = "*"?
- 22. Co to jest Postgresql_psycopg2?
- 23. Co to jest ?
- 24. co to jest .netrwhist?
- 25. co to jest Microsoft.Practices.EnterpriseLibrary.Data
- 26. Co to jest CGVector?
- 27. Co to jest $ {project.licensePath}?
- 28. co to jest alloc.h?
- 29. Co to jest PurpleEventCallback?
- 30. Co to jest global ::?
Jak mogę uzyskać ujemny, jest to cholernie dobre pytanie! – MrBoJangles
Uzgodnione, dobre pytanie z kilkoma miłymi odpowiedziami. –
[Ukryte funkcje C#] (http://stackoverflow.com/q/9033/4830) jest pełen idiomatycznego C#. Nie wszystkim to przeszkadza, ale wiele prostych jednolinijkowych z dużą liczbą przebojów można uznać za idiomatyczne. Niektóre odpowiedzi opisują także nie-idiomatyczne alternatywy. –