ทุกคนต้องการเขียนโค้ดที่สะอาด มีหนังสือทั้งเล่มเกี่ยวกับเรื่องนี้!
แต่คุณไม่จำเป็นต้องอ่านหนังสือเพื่อเขียนโค้ดที่สะอาดขึ้นในตอนนี้ มี “เคล็ดลับ” อย่างหนึ่งที่ผู้เขียนโค้ดทุกคนสามารถเรียนรู้ที่จะทำให้โค้ดของพวกเขาสับสนน้อยลง
กุญแจสำคัญคือ:
ทุกบรรทัดทำสิ่งเดียวเท่านั้น
หนึ่งบรรทัด หนึ่งงาน
แต่อย่าไปบ้ากับมัน
อย่าเป็นแบบนี้
นี่คือแนวคิดหลัก: โค้ดสั้นๆ ต้องใช้สมองในการอ่านน้อยกว่าโค้ดที่ยาว รหัสที่อ่านง่ายให้เหตุผลง่ายกว่า โปรแกรมที่มีบรรทัดที่สั้นกว่าในทางทฤษฎีจะง่ายต่อการบำรุงรักษา
แต่โค้ดขนาดกะทัดรัดอาจเป็นความลับได้ (เคยเห็น APL ไหม?) และเพียงเพราะคุณ สามารถ แยกบรรทัดไม่ได้หมายความว่าคุณควรจะทำ
ในบางภาษา คุณสามารถกำหนดค่าสองค่าให้กับสองตัวแปรในบรรทัดเดียว:
x, y = 2, 7
คุณ สามารถ ใส่ทั้งสองงานในบรรทัดของตนเอง:
x = 2 y = 7
แต่เอาเถอะ จำเป็น จริงๆเหรอ? คุณจะบอกได้อย่างไรว่าควรแยกบรรทัด?
ไม่ได้เกี่ยวกับความยาวสายทั้งหมด
Felienne Herman เปิดหนังสือของเธอ The Programmer’s Brain ด้วยความจริงที่ปฏิเสธไม่ได้: “ความสับสนเป็นส่วนหนึ่งของการเขียนโปรแกรม”
มันอาจจะหมายถึงถึงเวลาที่จะหยุดพัก
หนังสือของเฮอร์แมน (ซึ่งฉันขอแนะนำ) อธิบายว่าหน่วยความจำทั้งสามของสมองทำงานร่วมกันเพื่อทำความเข้าใจโค้ดอย่างไร:
- หน่วยความจำระยะยาว (LTM): จัดเก็บข้อมูลสำหรับการดึงข้อมูลระยะยาว เช่น คีย์เวิร์ด ไวยากรณ์ และสำนวนและรูปแบบที่ใช้กันทั่วไป
- หน่วยความจำระยะสั้น (STM): จัดเก็บข้อมูลใหม่สำหรับการดึงข้อมูลระยะสั้น (น้อยกว่า 30 วินาที!) เช่น ชื่อตัวแปรและค่าพิเศษ
- หน่วยความจำในการทำงาน (WM): ประมวลผลข้อมูลจาก LTM และ STM เพื่อสรุปผลและรับความรู้ใหม่
STM และ WM มีขนาดเล็ก ทั้งสองสามารถจัดเก็บได้ครั้งละ ประมาณ 4 ถึง 6 ชิ้นเท่านั้น! โอเวอร์โหลดแล้วคุณมีสูตรสำหรับความสับสน
สมองของคุณประมวลผลข้อมูลอย่างไร
นั่นทำให้เรามีกฎในการตัดสินใจว่าบรรทัดโค้ดนั้นซับซ้อนเกินไปหรือไม่:
บรรทัดของรหัสที่มีข้อมูลมากกว่า 6 ชิ้นควรทำให้ง่ายขึ้น
ฉันเรียกมันว่า “กฎหกข้อ”
นี่คือตัวอย่างใน Python:
map(lambda x: x.split('=')[1], s.split('?')[1].split('&')[-3:])
มันยากสำหรับคุณที่จะอ่านหรือไม่? ฉันด้วย. มีเหตุผลที่ดีว่าทำไม
คุณต้องรู้ว่า map
, lambda
และ .split()
คืออะไร ตัวแปร x
และ s
สตริง '='
, '?'
และ '&'
ดัชนี [1]
และสไลซ์ [-3:]
ทั้งหมดใช้พื้นที่ใน STM และ WM ทั้งหมด: สิบอย่าง! สมองของคุณไม่สามารถติดตามได้
หรือบางทีของ คุณ ก็ได้
ถ้าเป็นเช่นนั้น คุณมีประสบการณ์ที่ดีภายใต้เข็มขัดของคุณ
สมองของคุณ “แบ่งส่วน” ไวยากรณ์เช่น s.split('?')[1]
เป็น “ส่วนของสตริงทางด้านขวาของเครื่องหมายคำถาม” และคุณสามารถสร้างรหัสใหม่ได้โดยใช้ข้อมูลที่จัดเก็บไว้ใน LTM ของคุณ แต่คุณยังประมวลผลทีละสองสามชิ้นเท่านั้น
ดังนั้น… เราสามารถระบุได้เมื่อบรรทัดของโค้ดซับซ้อนเกินไป ตอนนี้ อะไร?
ต้องการมากกว่านี้?
อีเมลหนึ่งฉบับทุกวันเสาร์พร้อมเคล็ดลับที่นำไปใช้ได้จริง
เวลาของคุณน้อยกว่า 5 นาทีเสมอ
สมัครสมาชิกตอนนี้
หากรหัสสับสนให้ทำลายมัน
หั่นเป็นชิ้นเล็ก ๆ นั่นคือ!
มีสองกลยุทธ์ที่ฉันใช้เพื่อสลายโค้ด ฉันเรียกพวกเขาว่า SIMPLE และ MORF
กลยุทธ์ SIMPLE เพิ่ม บรรทัดของโค้ดเพื่อ ลด ภาระด้านความรู้ความเข้าใจ
ลองใช้ SIMPLE กับสายการบินเดียวที่น่ารังเกียจที่เราเห็นก่อนหน้านี้ ลบอาร์กิวเมนต์ที่สองออกจาก map()
และวางไว้ในบรรทัดของตัวเอง:
query_params = s.split('?')[1].split('&')[-3:] map(lambda x: x.split('=')[1], query_params)
ยังคงอ่านยากอยู่ มีเจ็ดสิ่งที่ควรติดตามในบรรทัดแรก:
-
query_params
-
s
-
.split()
-
'?'
-
[1]
-
'&'
-
[-3:]
แต่แต่ละบรรทัดมีสิ่งที่ต้องติดตามน้อยกว่าเมื่อก่อน สมองของคุณสามารถประมวลผลได้ง่ายขึ้น
ใช้ SIMPLE อีกครั้งและย้าย s.split('?')[1]
ไปยังบรรทัดใหม่:
url_query_string = s.split('?')[1] query_params = url_query_string.split('&')[-3:] map(lambda x: x.split('=')[1], query_params)
เปรียบเทียบกับซับในแบบเดิม อันไหนง่ายกว่าในการประมวลผล?
กลยุทธ์ MORF ใช้แนวทางที่แตกต่างและจัดกลุ่มโค้ดเป็นฟังก์ชัน
นี่คือสิ่งที่ MORF ใช้กับสายการบินเดียวของเรา:
def query_params(url): return url.split('?')[1].split('&')[-3:] map(lambda x: x.split('=')[1], query_params(s))
คุณสามารถรวม MORF และ SIMPLE เข้าด้วยกันได้:
def query_params(url): query_string = url.split('?')[1] return query_string.split('&')[-3:] map(lambda x: x.split('=')[1], query_params(s))
คุณไม่จำเป็นต้องเข้าใจรหัสเพื่อสัมผัสถึงผลกระทบ แต่ละบรรทัดจะทำให้สมองของคุณประมวลผลได้ง่ายขึ้น
มีประโยชน์โบนัสด้วย!
เมื่อคุณรู้ว่า WM และ STM ของคุณไม่ได้โอเวอร์โหลด คุณจะรู้ว่าความสับสนใดๆ ที่หลงเหลืออยู่นั้นเกิดจากข้อมูลที่ขาดหายไปใน LTM ของคุณ
กล่าวอีกนัยหนึ่ง SIMPLE และ MORF ไม่เพียงช่วยให้คุณเขียนโค้ดที่สะอาดขึ้นเท่านั้น พวกเขาช่วยคุณระบุช่องว่างความรู้ที่คุณสามารถปรับปรุงได้ด้วยการฝึกฝน!
ต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของสมองในขณะที่คุณกำลังเขียนโค้ดหรือไม่?
ตรวจสอบ สมองของโปรแกรมเมอร์ โดย Felienne Herman
เข้าถึงได้ทันทีผ่าน Manning หรือสั่งซื้อจาก Amazon
ออกกำลังกาย
ดูรหัสที่เราลงเอยด้วยการใช้ SIMPLE:
url_query_string = s.split('?')[1] query_params = url_query_string.split('&')[-3:] map(lambda x: x.split('=')[1], query_params)
บรรทัดหนึ่งยังคงมี “ความคิด” มากกว่าหกรายการและควรแยกออกตามกฎหกข้อ:
- สายไหน?
- อะไรคือ “ความคิด”
- คุณจะแยกมันออกได้อย่างไร?
- การแยกมันสร้างความแตกต่างอย่างมากหรือไม่?