รหัสสำนวนคืออะไร?


87

ฉันสนใจตัวอย่าง c # ก่อนและหลังบางตัวอย่างที่ไม่ใช่สำนวนกับสำนวน ตัวอย่างที่ไม่ใช่ c # ก็ใช้ได้เช่นกันหากพวกเขาเข้าใจแนวคิดนี้ ขอบคุณ.


3
คุณสมบัติที่ซ่อนอยู่ของ C #เต็มไปด้วยสำนวน C # ไม่ได้คำนึงถึงคุณทั้งหมด แต่การใช้ one-liners ที่เรียบง่ายจำนวนมากที่มี upvotes จำนวนมากอาจถือได้ว่าเป็นสำนวน และคำตอบบางคำอธิบายถึงทางเลือกที่ไม่ใช่สำนวนด้วย
Michiel van Oosterhout

คำตอบ:


122

สำนวนหมายถึงตามแบบแผนของภาษา คุณต้องการค้นหาวิธีที่ง่ายที่สุดและใช้บ่อยที่สุดในการทำงานให้สำเร็จแทนที่จะส่งต่อความรู้ของคุณจากภาษาอื่น

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] 

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.