Eu estaria interessado em alguns exemplos de c # antes e depois, alguns exemplos não idiomáticos versus idiomáticos. Exemplos não-c # também seriam adequados se eles transmitissem a ideia. Obrigado.
Eu estaria interessado em alguns exemplos de c # antes e depois, alguns exemplos não idiomáticos versus idiomáticos. Exemplos não-c # também seriam adequados se eles transmitissem a ideia. Obrigado.
Respostas:
Idiomático significa seguir as convenções do idioma. Você deseja encontrar as maneiras mais fáceis e comuns de realizar uma tarefa, em vez de transportar seu conhecimento de um idioma diferente.
python não idiomática usando um loop com append:
mylist = [1, 2, 3, 4]
newlist = []
for i in mylist:
newlist.append(i * 2)
python idiomática usando uma compreensão de lista:
mylist = [1, 2, 3, 4]
newlist = [(i * 2) for i in mylist]
Alguns exemplos:
Gerenciamento de recursos , não idiomático:
string content;
StreamReader sr = null;
try {
File.OpenText(path);
content = sr.ReadToEnd();
}
finally {
if (sr != null) {
sr.Close();
}
}
Idiomático:
string content;
using (StreamReader sr = File.OpenText(path)) {
content = sr.ReadToEnd();
}
Iteração , não idiomática:
for (int i=0;i<list.Count; i++) {
DoSomething(list[i]);
}
Também não idiomático:
IEnumerator e = list.GetEnumerator();
do {
DoSomenthing(e.Current);
} while (e.MoveNext());
Idiomático:
foreach (Item item in list) {
DoSomething(item);
}
Filtragem , não idiomática:
List<int> list2 = new List<int>();
for (int num in list1) {
if (num>100) list2.Add(num);
}
idiomático:
var list2 = list1.Where(num=>num>100);
Código idiomático é o código que executa uma tarefa comum da maneira comum para o seu idioma. É semelhante a um padrão de design, mas em uma escala muito menor. Os idiomas variam amplamente por idioma. Um idioma em C # pode ser usar um iterador para iterar por meio de uma coleção em vez de fazer um loop por ela. Outras linguagens sem iteradores podem contar com o idioma do loop.
Na prática, significa escrever código de maneira consistente, ou seja, todos os desenvolvedores que trabalham em sua base de código devem seguir as mesmas convenções ao escrever construções de código semelhantes.
Portanto, a forma idiomática é a maneira que corresponde ao estilo do outro código, a forma não idiomática significa que você está escrevendo o tipo de função, mas de uma maneira diferente.
por exemplo, se você estiver executando um loop de um certo número de itens, poderá escrever o loop de várias maneiras:
for (int i = 0; i < itemCount; i++)
for (int i = 1; i <= itemCount; i++)
for (int i = 0; i < itemCount; ++i)
etc
O mais importante é que o estilo escolhido seja usado de forma consistente. Dessa forma, as pessoas se familiarizam e confiam em como usá-lo, e quando você vê um uso que parece diferente, pode ser um sinal de que um erro foi introduzido, talvez um erro errado, por exemplo
for (int i = 1; i < itemCount; i++)