관용 부호 란 무엇입니까?


87

저는 C # 전후의 몇 가지 예, 비 관용적 대 관용적 예에 관심이 있습니다. 비 c # 예제도 아이디어를 얻을 수 있다면 괜찮을 것입니다. 감사.


3
C #의 숨겨진 기능은 관용적 C #으로 가득 차 있습니다. 모든 것이 당신을 염두에 두는 것은 아니지만 많은 수의 찬성표를 가진 간단한 한 줄짜리 많은 사람들은 관용적이라고 간주 될 수 있습니다. 그리고 일부 답변은 비 관상적인 대안도 설명합니다.
Michiel van Oosterhout 2013 년

답변:


123

관용적이란 언어의 규칙을 따르는 것을 의미합니다. 다른 언어에서 지식을 이식하는 대신 작업을 수행하는 가장 쉽고 일반적인 방법을 찾고 싶습니다.

추가와 함께 루프를 사용하는 비 관용적 파이썬 :

mylist = [1, 2, 3, 4]
newlist = []
for i in mylist:
    newlist.append(i * 2)

목록 이해력을 사용하는 관용적 파이썬 :

mylist = [1, 2, 3, 4]
newlist = [(i * 2) for i in mylist] 

36

몇 가지 예 :

자원 관리 , 비 관용적 :

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);

13
중괄호는 관용적 인 Java ;-)
Mathieu Guindon

15

관용적 코드는 귀하의 언어에 대해 일반적인 방식으로 일반적인 작업을 수행하는 코드입니다. 디자인 패턴과 비슷하지만 규모가 훨씬 작습니다. 관용구는 언어에 따라 크게 다릅니다. C #의 관용구 중 하나는 반복기를 사용하여 컬렉션을 반복하는 대신 반복기를 사용하는 것입니다. 반복자가없는 다른 언어는 루프 관용구에 의존 할 수 있습니다.


6

PHP에서는 때때로 다음과 같은 코드가 발생합니다.

foreach ($array as $value) {
    $trimmed[] = trim($value);
}
return $trimmed;

관용적으로 다음과 같이 구현할 수 있습니다.

return array_map('trim', $array);

5

실제로는 일관된 방식으로 코드를 작성하는 것을 의미합니다. 즉, 코드 기반에서 작업하는 모든 개발자는 유사한 코드 구조를 작성할 때 동일한 규칙을 따라야합니다.

따라서 관용적 방식은 다른 코드의 스타일과 일치하는 방식입니다. 비 관용적 방식은 일종의 함수를 작성하지만 다른 방식으로 작성한다는 의미입니다.

예를 들어 특정 개수의 항목을 반복하는 경우 여러 가지 방법으로 루프를 작성할 수 있습니다.

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++)

2
나는 관용이 단지 임의의 표준이 아니라 "최선의 방법"을 의미한다고 생각한 것 같다. 하지만 가장 좋은 방법은 상황에 따라 달라집니다.
MrBoJangles
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.