Мене зацікавлять деякі приклади до та після c #, деякі неідіоматичні та ідіоматичні приклади. Приклади, не пов’язані з c #, також непогані, якщо вони донесуть ідею. Дякую.
Мене зацікавлять деякі приклади до та після c #, деякі неідіоматичні та ідіоматичні приклади. Приклади, не пов’язані з c #, також непогані, якщо вони донесуть ідею. Дякую.
Відповіді:
Ідіоматичні засоби відповідають умовним мовам. Ви хочете знайти найпростіші та найпоширеніші способи виконання завдання, а не переносити свої знання з іншої мови.
неідіоматичний python, що використовує цикл з додаванням:
mylist = [1, 2, 3, 4]
newlist = []
for i in mylist:
newlist.append(i * 2)
ідіоматичний python з використанням розуміння списку:
mylist = [1, 2, 3, 4]
newlist = [(i * 2) for i in mylist]
Кілька прикладів:
Управління ресурсами , не ідіоматично:
string content;
StreamReader sr = null;
try {
File.OpenText(path);
content = sr.ReadToEnd();
}
finally {
if (sr != null) {
sr.Close();
}
}
Ідіоматичний:
string content;
using (StreamReader sr = File.OpenText(path)) {
content = sr.ReadToEnd();
}
Ітерація , не ідіоматична:
for (int i=0;i<list.Count; i++) {
DoSomething(list[i]);
}
Також неідіоматично:
IEnumerator e = list.GetEnumerator();
do {
DoSomenthing(e.Current);
} while (e.MoveNext());
Ідіоматичний:
foreach (Item item in list) {
DoSomething(item);
}
Фільтрування , неідіоматичне:
List<int> list2 = new List<int>();
for (int num in list1) {
if (num>100) list2.Add(num);
}
ідіоматично:
var list2 = list1.Where(num=>num>100);
Ідіоматичний код - це код, який виконує загальне завдання загальноприйнятою для вашої мови. Це схоже на шаблон дизайну, але в значно меншому масштабі. Ідіоми сильно відрізняються залежно від мови. Однією з ідіом у C # може бути використання ітератора для ітерації колекції, а не циклічне її проходження. Інші мови без ітераторів можуть покладатися на ідіому циклу.
Практично кажучи, це означає послідовне написання коду, тобто всі розробники, які працюють над вашою базою коду, повинні дотримуватися однакових конвенцій під час написання подібних конструкцій коду.
Отже, ідіоматичний спосіб - це спосіб, який відповідає стилю іншого коду, неідіоматичний спосіб означає, що ви пишете тип функції, але по-іншому.
наприклад, якщо ви переглядаєте певну кількість елементів, ви можете написати цикл кількома способами:
for (int i = 0; i < itemCount; i++)
for (int i = 1; i <= itemCount; i++)
for (int i = 0; i < itemCount; ++i)
тощо
Найголовніше - це те, що обраний стиль використовується послідовно. Таким чином, люди стають дуже знайомими і впевненими в тому, як ним користуватися, і коли ви підглядаєте за використанням, яке виглядає по-іншому, це може бути ознакою помилки, яка вводиться, можливо, помилкою, наприклад
for (int i = 1; i < itemCount; i++)