ฉันพบโพสต์นี้ค้นหาสำนวน C ++ ทั่วไปเนื่องจากฉันได้รับลึกลงไปในมันเมื่อเร็ว ๆ นี้และต้องการรหัสของฉันดูไม่ชำนาญเท่าที่ฉันคิดว่ามันเป็น ... :-P
เมื่อใช้เวลากับ Perl ค่อนข้างนานฉันได้พบสำนวนในภาษานั้นเหมือนกับภาษาธรรมชาติเช่นภาษาอังกฤษหรือภาษาสเปน (มีเพียงสองคนเท่านั้นที่รู้พอที่จะรู้สำนวน)
ฉันไม่เห็นด้วยว่าสำนวนเป็นเหมือน "รูปแบบการออกแบบขนาดเล็ก" ฉันยังไม่เห็นด้วยถึงแม้จะน้อยกว่านั้นว่าสำนวนเป็นวิธีการแก้ไขข้อบกพร่องในภาษา
บางทีคำตอบของ Luc Dantonอาจเข้ามาใกล้ที่สุด แต่ให้ฉันอธิบาย ฉันคิดว่าสำนวนเป็นสิ่งที่ดีสำนวนของผู้ที่ใช้ภาษา โดยปกติแล้วนิพจน์ทั่วไปหรือลำดับของการแสดงออกที่ในขณะที่อาจไม่ชัดเจนดำเนินการหรือแสดงออกถึงเจตนาในทางที่เหมาะสมกับผู้ที่มีความชำนาญพอที่จะเห็นมันมาก่อน
กลับไป Perl อาจเป็นสำนวนที่รู้จักกันดีที่สุดคือ " Schwartzian Transform " นิพจน์ที่ดำเนินการเรียงลำดับข้อมูลในลักษณะที่กะทัดรัดและมีประสิทธิภาพ มันไม่ได้เป็นวิธีที่ชัดเจนที่สุดในการดำเนินการดังกล่าว แต่มันรวบรัดและผู้ที่ได้เห็นมาก่อนรู้ทันทีว่ามันกำลังทำอะไร
อีกตัวอย่างที่น่าสังเกตคือ " The Orcish Maneuver " ซึ่งใช้ประโยชน์จากแนวคิดของ perl ของตัวดำเนินการจริง / เท็จ, ตัวดำเนินการรวยและความสำคัญของตัวดำเนินการ
หนึ่งที่ฉันชอบโดยส่วนตัวค่อนข้างจะค่อนข้างเกี่ยวข้องกับ Orcish Maneuver แต่ฉันรู้ว่าไม่มีชื่อ:
push @{ $some_hash{$key} ||= [] }, $some_value;
นี่ไม่ใช่การทำให้งงงวย แต่เป็นการแสดงออกที่ชัดเจนและกะทัดรัดของบางสิ่งที่อาจใช้เวลาหลายบรรทัดในการทำ หากคีย์มีอยู่ในแฮชและมีค่าจริงให้ยกเลิกการอ้างอิงเป็นอาร์เรย์และกด $ some_value ลงในอาร์เรย์นั้น หากองค์ประกอบแฮชไม่มีอยู่หรือมีค่าเท็จให้กำหนดอาเรย์ที่ว่างเปล่าจากนั้นตรวจสอบอาเรย์นั้นแล้วทำการพุช
นอกจากนี้ยังเป็นที่น่าสังเกตว่าเป็นของ Perl 5.14 ส่วนหนึ่งของสำนวนนี้เป็นล้าสมัย - ผลักดันในขณะนี้สามารถใช้งานได้โดยตรงบนอ้างอิงอาร์เรย์ไม่มี @ {} จำเป็น! นอกจากนี้ในฐานะของ Perl 5.10 เราสามารถใช้ // = แทน || = ซึ่งตรวจสอบไม่ได้สำหรับความจริง แต่สำหรับการกำหนด -ness