나는 최근에 상당히 깊어지고 있고 내가 느끼는 것처럼 아마추어처럼 보이지 않도록 코드를 원하기 때문에 일반적인 C ++ 관용구를 검색하는이 게시물을 발견했습니다. :-P
Perl과 꽤 많은 시간을 보냈는데, 그 언어의 관용구가 영어 나 스페인어와 같은 자연 언어에서 사용되는 관용구와 매우 흡사하다는 것을 알았습니다.
나는 관용구가 "작은 디자인 패턴"과 같다는 것에 동의하지 않습니다. 그럼에도 불구하고, 관용구가 언어의 부족을 해결하는 방법이라는 데 여전히 동의하지 않습니다.
아마도 Luc Danton의 대답 이 가장 가깝지만 설명하겠습니다. 나는 관용구가 언어를 사용하는 사람들의 관용적 이라고 생각합니다 . 일반적으로, 아마도 명백하지는 않지만, 이전에 그것을 보았을 정도로 유창한 사람들에게 의미있는 방식으로 작업을 수행하거나 의도를 표현하는 일반적인 표현 또는 일련의 표현 .
펄로 돌아 가면 아마도 가장 잘 알려진 관용구는 " 슈바르츠 변환 (Schwartzian Transform) "인데, 이는 데이터에 대해 작고 효율적인 방식으로 정렬을 수행하는 표현입니다. 그러한 작업을 수행하는 가장 확실한 방법은 아니지만 간결하며 이전에 본 사람들은 작업을 즉시 알 수 있습니다.
또 다른 주목할만한 예는 " The Orcish Maneuver "로, 펄의 참 / 거짓, 리치 연산자 및 연산자 우선 순위 개념을 활용합니다.
개인적으로 아주 좋아하는 것은 Orcish Maneuver와 다소 관련이 있지만 이름은 없습니다.
push @{ $some_hash{$key} ||= [] }, $some_value;
이것은 실제로 난독 화가 아니라, 몇 줄이 걸리는 무언가를 명확하고 간결하게 표현한 것입니다. 키가 해시에 존재하고 실제 값을 갖는 경우, 키를 배열로 역 참조하고 $ some_value를 해당 배열로 푸시하십시오. 해시 요소가 없거나 잘못된 값이 있으면 빈 배열을 할당 한 다음 해당 배열을 역 참조하고 푸시를 수행하십시오.
또한 Perl 5.14부터이 관용구의 일부는 쓸모가 없다는 점에 주목할 필요가 있습니다. 이제 푸시 는 어레이 참조에서 직접 작동 할 수 있으며 @ {}가 필요하지 않습니다! 또한 Perl 5.10부터는 || = 대신 // =를 사용하여 진실이 아닌 정의를 검사 할 수 있습니다.