Byłbym zainteresowany kilkoma przykładami języka C # przed i po, przykładami nieidiomatycznymi i idiomatycznymi. Przykłady inne niż C # byłyby również w porządku, jeśli przekażą pomysł. Dzięki.
Byłbym zainteresowany kilkoma przykładami języka C # przed i po, przykładami nieidiomatycznymi i idiomatycznymi. Przykłady inne niż C # byłyby również w porządku, jeśli przekażą pomysł. Dzięki.
Odpowiedzi:
Idiomatyczny oznacza zgodny z konwencjami języka. Chcesz znaleźć najłatwiejsze i najczęstsze sposoby wykonania zadania, zamiast przenosić swoją wiedzę z innego języka.
nieidiomatyczny python używający pętli z dopiskiem:
mylist = [1, 2, 3, 4]
newlist = []
for i in mylist:
newlist.append(i * 2)
idiomatyczny Python używający rozumienia list:
mylist = [1, 2, 3, 4]
newlist = [(i * 2) for i in mylist]
Kilka przykładów:
Zarządzanie zasobami , nie idiomatyczne:
string content;
StreamReader sr = null;
try {
File.OpenText(path);
content = sr.ReadToEnd();
}
finally {
if (sr != null) {
sr.Close();
}
}
Idiomatyczny:
string content;
using (StreamReader sr = File.OpenText(path)) {
content = sr.ReadToEnd();
}
Iteracja , nie idiomatyczna:
for (int i=0;i<list.Count; i++) {
DoSomething(list[i]);
}
Również nie idiomatyczny:
IEnumerator e = list.GetEnumerator();
do {
DoSomenthing(e.Current);
} while (e.MoveNext());
Idiomatyczny:
foreach (Item item in list) {
DoSomething(item);
}
Filtrowanie , nie idiomatyczne:
List<int> list2 = new List<int>();
for (int num in list1) {
if (num>100) list2.Add(num);
}
idiomatyczny:
var list2 = list1.Where(num=>num>100);
Kod idiomatyczny to kod, który wykonuje typowe zadania w typowy sposób dla Twojego języka. Jest podobny do wzorca projektowego, ale w znacznie mniejszej skali. Idiomy różnią się znacznie w zależności od języka. Jednym z idiomów w C # może być użycie iteratora do iteracji w kolekcji, zamiast przechodzenia przez nią. Inne języki bez iteratorów mogą polegać na idiomie pętli.
W praktyce oznacza to pisanie kodu w spójny sposób, tzn. Wszyscy programiści pracujący na bazie Twojego kodu powinni przestrzegać tych samych konwencji podczas pisania podobnych konstrukcji kodu.
Więc idiomatyczny sposób to sposób, który pasuje do stylu innego kodu, nieidiomatyczny sposób oznacza, że piszesz rodzaj funkcji, ale w inny sposób.
np. jeśli zapętlasz określoną liczbę elementów, możesz 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
Najważniejsze jest konsekwentne stosowanie wybranego stylu. W ten sposób ludzie stają się bardzo zaznajomieni i pewni, jak go używać, a kiedy szpiegujesz użycie, które wygląda inaczej, może to być oznaką wprowadzenia błędu, być może pomyłką o jeden błąd, np.
for (int i = 1; i < itemCount; i++)