Skip to content

คนไทยมองโลก

แปลบทความดีเด่นเพื่อคนไทยในอุดมคติอันสูงส่ง

Menu
  • Sample Page
Menu

ต้องการรหัสทำความสะอาดหรือไม่ ใช้กฎหก

Posted on กันยายน 24, 2022

ต้องการรหัสทำความสะอาดหรือไม่ ใช้กฎหก

ทุกคนต้องการเขียนโค้ดที่สะอาด มีหนังสือทั้งเล่มเกี่ยวกับเรื่องนี้!

แต่คุณไม่จำเป็นต้องอ่านหนังสือเพื่อเขียนโค้ดที่สะอาดขึ้นในตอนนี้ มี “เคล็ดลับ” อย่างหนึ่งที่ผู้เขียนโค้ดทุกคนสามารถเรียนรู้ที่จะทำให้โค้ดของพวกเขาสับสนน้อยลง

กุญแจสำคัญคือ:

ทุกบรรทัดทำสิ่งเดียวเท่านั้น

หนึ่งบรรทัด หนึ่งงาน

แต่อย่าไปบ้ากับมัน

ต้องการรหัสทำความสะอาดหรือไม่ ใช้กฎหก อย่าเป็นแบบนี้

นี่คือแนวคิดหลัก: โค้ดสั้นๆ ต้องใช้สมองในการอ่านน้อยกว่าโค้ดที่ยาว รหัสที่อ่านง่ายให้เหตุผลง่ายกว่า โปรแกรมที่มีบรรทัดที่สั้นกว่าในทางทฤษฎีจะง่ายต่อการบำรุงรักษา

แต่โค้ดขนาดกะทัดรัดอาจเป็นความลับได้ (เคยเห็น 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)

บรรทัดหนึ่งยังคงมี “ความคิด” มากกว่าหกรายการและควรแยกออกตามกฎหกข้อ:

  • สายไหน?
  • อะไรคือ “ความคิด”
  • คุณจะแยกมันออกได้อย่างไร?
  • การแยกมันสร้างความแตกต่างอย่างมากหรือไม่?

ใส่ความเห็น ยกเลิกการตอบ

คุณต้องเข้าสู่ระบบ เพื่อจะพิมพ์ความเห็น

  • A learning a day
  • A Smart Bear
  • AddyOsmani.com
  • AddyOsmani.com (AddyOsmani.com)
  • Adwyat Krishna
  • Adwyat Krishna (Adwyat Krishna)
  • Ahmad Shadeed (Ahmad Shadeed)
  • Alex Turek
  • All That is Solid
  • André Staltz
  • Ars Technica
  • Astral Codex สิบ (Astral Codex Ten)
  • Atoms vs Bits
  • AVC
  • AVC (AVC)
  • Basic Apple Guy
  • Ben Thompson
  • Benedict Evans
  • Blog – storytelling with data
  • Built For Mars
  • Caleb Porzio
  • Christian Heilmann
  • Christian Heilmann (Christian Heilmann)
  • Christopher C
  • Chun Tian (binghe)
  • Codrops
  • Cold Takes
  • Cold Takes (Cold Takes)
  • Daily Infographic
  • Dan Luu
  • Daniel Lemire's blog
  • David Amos
  • David Perell
  • David Walsh Blog
  • Derek Sivers
  • Derek Sivers (Derek Sivers)
  • Desvl
  • Devon's Site
  • Digital Inspiration
  • DKB Blog
  • dropsafe
  • dropsafe (dropsafe)
  • DSHR
  • Dunk
  • DYNOMIGHT
  • eagereyes
  • Endless Metrics
  • Engadget
  • Engadget (Engadget)
  • Entitled Opinions
  • Exception Not Found
  • Experimental History
  • Farnam Street
  • Fed Guy
  • Fed Guy (Fed Guy)
  • Felix Krause
  • Florent Crivello
  • FlowingData
  • FlowingData (FlowingData)
  • Free Mind
  • Full Stack Economics
  • Funny JS
  • Future A16Z
  • Glassnode Insights
  • Glassnode Insights (Glassnode Insights)
  • Hacker News (Hacker News)
  • Hacker News Daily
  • Hacker News Daily (Hacker News Daily)
  • Hacker Noon (Hacker Noon)
  • Harvard Health
  • Harvard Health (Harvard Health)
  • Human Who Codes
  • Hunter Walk
  • Infographics – Cool Infographics
  • Information is Beautiful
  • Irrational Exuberance
  • Jacob Kaplan-Moss
  • Jakob Greenfeld
  • James Sinclair
  • Jason Fried
  • Jeff Kaufman
  • Jeff Kaufman (Jeff Kaufman)
  • Joel on Software
  • John Resig
  • John's internet house
  • Johnny Rodgers
  • Julia Evans
  • Julian.com
  • Kevin Cox
  • Kevin Norman
  • KK – Cool Tools
  • KK – Recomendo
  • KK – The Technium
  • KK – The Technium (KK – The Technium)
  • KK – เครื่องมือสุดเจ๋ง (KK – Cool Tools)
  • KK – แนะนำ (KK – Recomendo)
  • Krishna
  • Lee Robinson
  • Lines and Colors
  • Lyn Alden – Investment Strategy
  • MakeUseOf (MakeUseOf)
  • Martin Fowler
  • Mobilism Forums
  • More To That
  • Morgan Housel
  • Morgan Housel (Morgan Housel)
  • My Super Secret Diary
  • NASA Astronomy Picture
  • Neckar's New Money
  • News Letter
  • Nick Whitaker
  • Nicky's New Shtuff
  • nutcroft
  • Paul Graham
  • Penguin Random House
  • Philip Walton
  • Phoenix's island
  • Pivotal
  • Product Hunt
  • Prof Galloway
  • Psyche
  • Python Weekly
  • Python Weekly (Python Weekly)
  • Quanta Magazine
  • Rachel
  • Rachel (Rachel)
  • Real Life
  • Riccardo Mori
  • Riccardo Mori (Riccardo Mori)
  • Sasha
  • Science & technology
  • Science current issue
  • Scott Hanselman's Blog
  • Sébastien Dubois
  • Sébastien Dubois (Sébastien Dubois)
  • Secretum Secretorum
  • Seth's Blog
  • Shu Ding
  • Sidebar
  • SignalFire
  • Simon Willison's Weblog
  • Simons Foundation
  • Singularity HUB
  • SLIME MOLD TIME MOLD
  • Slyar Home
  • Spencer Greenberg
  • Stay SaaSy
  • Stephen Malina
  • Stephen Wolfram Writings
  • Strange Loop Canon
  • Stratechery
  • Tech Notes
  • TechCrunch
  • TechCrunch (TechCrunch)
  • The Commonplace
  • The Intrinsic Perspective
  • The Latest in Hearing Health | HeardThat
  • The Rabbit Hole
  • The Verge
  • The Verge (The Verge)
  • The Wall Street Journal (The Wall Street Journal)
  • TLDR Newsletter
  • Tom's blog
  • Tomasz Tunguz
  • Tomasz Tunguz (Tomasz Tunguz)
  • Troy Hunt
  • twitter via [email protected] on Inoreader
  • Tychlog
  • Uncharted Territories
  • Visual Capitalist
  • Visual.ly (Visual.ly)
  • Visualising Data
  • Vitalik Buterin
  • Vitalik Buterin (Vitalik Buterin)
  • Weichen Liu
  • What's New
  • Works in Progress
  • Workspaces
  • Writing
  • Xe's Blog
  • xkcd.com
  • xkcd.com (xkcd.com)
  • Yihui Xie
  • Yihui Xie (Yihui Xie)
  • yuzu (yuzu)
  • Zoran Jambor
  • กฤษณะ (Krishna)
  • กลยุทธ์ (Stratechery)
  • การแสดงข้อมูล (Visualising Data)
  • ข้อมูลมีความสวยงาม (Information is Beautiful)
  • ความคิดเห็นที่มีสิทธิ์ (Entitled Opinions)
  • ความอุดมสมบูรณ์อย่างไม่มีเหตุผล (Irrational Exuberance)
  • คัดสรรสมอง (Brain Pickings)
  • จดหมายข่าว (News Letter)
  • จดหมายข่าว TLDR (TLDR Newsletter)
  • จอห์นนี่ ร็อดเจอร์ส (Johnny Rodgers)
  • จาค็อบ แคปแลน-มอสส์ (Jacob Kaplan-Moss)
  • จิตใจ (Psyche)
  • จูเลีย อีแวนส์ (Julia Evans)
  • ชีวิตจริง (Real Life)
  • ซาช่า (Sasha)
  • ดักลาส วาเก็ตตี้ (Douglas Vaghetti)
  • ดินแดนที่ไม่จดที่แผนที่ (Uncharted Territories)
  • ตัวชี้วัดที่ไม่มีที่สิ้นสุด (Endless Metrics)
  • ตากระตือรือร้น (eagereyes)
  • ทรอย ฮันท์ (Troy Hunt)
  • ทวิตเตอร์แปล
  • ทั้งหมดที่เป็นของแข็ง (All That is Solid)
  • ธรรมดา (The Commonplace)
  • นักพัฒนาภาคปฏิบัติ (The Practical Developer)
  • นักเศรษฐศาสตร์ (Enonomist)
  • นักเศรษฐศาสตร์ (The Economist)
  • นักเศรษฐศาสตร์พิมพ์ (Enonomist Print)
  • นายทุนทัศนศิลป์ (Visual Capitalist)
  • นิตยสาร Quanta (Quanta Magazine)
  • บล็อก – การเล่าเรื่องด้วยข้อมูล (Blog – storytelling with data)
  • บล็อก DKB (DKB Blog)
  • บล็อกของ Daniel Lemire (Daniel Lemire's blog)
  • บล็อกของ David Walsh (David Walsh Blog)
  • บล็อกข้อมูล | เดอะการ์เดียน (Datablog | The Guardian)
  • บันทึก Mad Ned (The Mad Ned Memo)
  • บ้านอินเทอร์เน็ตของจอห์น (John's internet house)
  • พอล เกรแฮม (Paul Graham)
  • พื้นฐาน Apple Guy (Basic Apple Guy)
  • พื้นที่ทำงาน (Workspaces)
  • ภาวะเอกฐานฮับ (Singularity HUB)
  • มหึมา (Colossal)
  • มากกว่านั้น (More To That)
  • มาร์ติน ฟาวเลอร์ (Martin Fowler)
  • มีอะไรใหม่ (What's New)
  • มุมมองภายใน (The Intrinsic Perspective)
  • มูลนิธิไซม่อน (Simons Foundation)
  • ยาคอบ กรีนเฟลด์ (Jakob Greenfeld)
  • รูปภาพดาราศาสตร์ของนาซ่า (NASA Astronomy Picture)
  • ล่าสินค้า (Product Hunt)
  • ลิน อัลเดน – กลยุทธ์การลงทุน (Lyn Alden – Investment Strategy)
  • ลูกจันทน์เทศ (nutcroft)
  • วันแห่งการเรียนรู้ (A learning a day)
  • วิทยาศาสตร์ & เทคโนโลยี (Science & technology)
  • วิทยาศาสตร์ปัญหาปัจจุบัน (Science current issue)
  • ศ.กัลโลเวย์ (Prof Galloway)
  • สมาร์ทแบร์ (A Smart Bear)
  • สัญญาณไฟ (SignalFire)
  • หลุมกระต่าย (The Rabbit Hole)
  • อนาคต A16Z (Future A16Z)
  • อะตอมกับบิต (Atoms vs Bits)
  • อาส เทคนิค (Ars Technica)
  • อินโฟกราฟิก – อินโฟกราฟิกสุดเจ๋ง (Infographics – Cool Infographics)
  • อินโฟกราฟิกรายวัน (Daily Infographic)
  • อเล็กซ์ ทูเร็ค (Alex Turek)
  • ฮันเตอร์วอล์ค (Hunter Walk)
  • เงินใหม่ของเนคคาร์ (Neckar's New Money)
  • เจสัน ฟรายด์ (Jason Fried)
  • เดวิด เอมอส (David Amos)
  • เดอะการ์เดียน (Guardian)
  • เดอะการ์เดียน (The Guardian)
  • เทคโนโลยีเสพติด (Engadget)
  • เบน ทอมป์สัน (Ben Thompson)
  • เบเนดิกต์ อีแวนส์ (Benedict Evans)
  • เศรษฐศาสตร์เต็มกอง (Full Stack Economics)
  • เส้นและสี (Lines and Colors)
  • เหวยเฉินหลิว (Weichen Liu)
  • แคนนอนวงแปลก (Strange Loop Canon)
  • แถบด้านข้าง (Sidebar)
  • แรงบันดาลใจดิจิทัล (Digital Inspiration)
  • แอตแลนติก (The Atlantic)
  • โซรัน จัมโบร์ (Zoran Jambor)
  • ใช้ประโยชน์จาก (Make Use Of)
  • ไดอารี่สุดยอดของฉัน (My Super Secret Diary)
  • ไดโนไมท์ (DYNOMIGHT)
  • ไม่พบข้อยกเว้น (Exception Not Found)
  • ไม่มีหมวดหมู่

ทวิตเตอร์แปล

#ยูเครน️ (ค้นหาด้วย Twitter) (#Ukraine️ (Twitter search)) arxivblog (arxivblog) Brett Winton (Brett Winton) Cathie Wood (Cathie Wood) GeekWire (GeekWire) Parag Agrawal (Parag Agrawal) Peter Thiel (Peter Thiel) Steph Smith (Steph Smith) The New York Review of  หนังสือ (The New York Review of Books) Vitalik Buterin (Vitalik Buterin) กีคไวร์ (GeekWire) ช่องของ Durov (Durov's Channel) ทหารเรือ (Naval) ทิมคุก (Tim Cook) ทิม คุก (Tim Cook) นาวาล (Naval) นเรนทรา โมดี (Narendra Modi) บิลเกตส์ (Bill Gates) มาร์ค เกอร์มัน (Mark Gurman) มาร์ค เกอร์แมน (Mark Gurman) สตีฟ สมิธ (Steph Smith) อีลอน มัสก์ (Elon Musk) เคธี่ วูด (Cathie Wood) เบรตต์ วินตัน (Brett Winton) เรย์ ดาลิโอ (Ray Dalio) โจ ไบเดน (Joe Biden) ไวทาลิก บิวเทริน (Vitalik Buterin)

  • กุมภาพันธ์ 2023
  • มกราคม 2023
  • ธันวาคม 2022
  • พฤศจิกายน 2022
  • ตุลาคม 2022
  • กันยายน 2022
  • สิงหาคม 2022
  • กรกฎาคม 2022
  • มิถุนายน 2022
  • พฤษภาคม 2022
  • เมษายน 2022
  • มีนาคม 2022
  • กุมภาพันธ์ 2022
©2023 คนไทยมองโลก | Design: Newspaperly WordPress Theme