สิ่งหนึ่งที่ควรทราบคือรหัสนั้นอ่านบ่อยๆเพื่อ "ความลึก" ที่แตกต่างกัน รหัสนี้:
PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE);
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "abc");
wakeLock.acquire();
ง่ายต่อการ "เรียด" มันเป็นงบ 3 PowerManager
ครั้งแรกที่เรามาด้วย WakeLock
จากนั้นเราก็มาด้วย แล้วเรา ฉันเห็นได้อย่างง่ายดายจริง ๆ เพียงแค่ดูจุดเริ่มต้นของแต่ละบรรทัด การกำหนดตัวแปรอย่างง่ายนั้นง่ายต่อการจดจำเพียงบางส่วนว่า "Type varName = ... " และเพียงแค่อ่านสกิลเหนือ "... " ในทำนองเดียวกันคำแถลงสุดท้ายนั้นเห็นได้ชัดว่าไม่ใช่รูปแบบของการมอบหมาย แต่มันเกี่ยวข้องกับชื่อเพียงสองชื่อดังนั้น "ส่วนสำคัญหลัก" จึงปรากฏขึ้นทันที บ่อยครั้งที่ฉันต้องรู้ว่าฉันแค่พยายามตอบว่า "รหัสนี้ทำอะไร?" ในระดับสูงacquire
wakeLock
หากฉันไล่ตามข้อผิดพลาดที่ฉันคิดว่าอยู่ที่นี่แน่นอนว่าฉันจะต้องตรวจสอบรายละเอียดให้มากขึ้นและจะจดจำ "... " แต่โครงสร้างคำสั่งแยกต่างหากยังช่วยให้ฉันทำทีละคำสั่ง (มีประโยชน์โดยเฉพาะอย่างยิ่งถ้าฉันต้องกระโดดลึกเข้าไปในการดำเนินการสิ่งที่ถูกเรียกในแต่ละคำสั่ง; เมื่อฉันกลับมาฉันเข้าใจอย่างเต็มที่ "หนึ่งหน่วย" และจากนั้นสามารถไปยังข้อความถัดไป)
((PowerManager)getSystemService(POWER_SERVICE))
.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakelockTag")
.acquire();
ตอนนี้มันเป็นคำสั่งเดียวทั้งหมด โครงสร้างระดับบนสุดไม่ใช่เรื่องง่ายที่จะอ่าน ในเวอร์ชั่นดั้งเดิมของ OP โดยไม่มีการแพร่กระจายและการเยื้องเพื่อสื่อสารโครงสร้างใด ๆ ที่มองเห็นได้ฉันจะต้องนับวงเล็บเพื่อถอดรหัสมันเป็นลำดับ 3 ขั้นตอน หากนิพจน์หลายส่วนบางส่วนซ้อนกันภายในแทนที่จะจัดเรียงเป็นสายโซ่ของการเรียกเมธอดมันก็ยังคงออกมาดูคล้ายกับเรื่องนี้ดังนั้นฉันจึงต้องระมัดระวังเกี่ยวกับการไว้วางใจโดยไม่ต้องนับวงเล็บ และถ้าฉันเชื่อมั่นในการเยื้องและแค่อ่านล่วงหน้าไปยังสิ่งสุดท้ายในฐานะที่เป็นจุดสันนิษฐานของสิ่งนี้.acquire()
บอกฉันเกี่ยวกับตัวเอง?
บางครั้งนั่นอาจเป็นสิ่งที่คุณต้องการ ถ้าฉันใช้การแปลงครึ่งทางของคุณและเขียนว่า:
WakeLock wakeLock =
((PowerManeger)getSystemService(POWER_SERVICE))
.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLockTage");
wakeLock.acquire();
ตอนนี้สิ่งนี้สื่อสารกับสกิมอย่างรวดเร็ว "รับWakeLock
แล้วacquire
มัน" เรียบง่ายกว่ารุ่นแรก WakeLock
มันเห็นได้ชัดทันทีว่าสิ่งที่จะได้รับคือ หากการได้รับPowerManager
เป็นเพียงรายละเอียดย่อยที่ไม่มีนัยสำคัญพอสมควรกับรหัสนี้ แต่wakeLock
สิ่งสำคัญคือมันจะช่วยให้สามารถฝังPowerManager
สิ่งต่าง ๆ ได้ดังนั้นจึงเป็นเรื่องธรรมดาที่จะอ่านอย่างรวดเร็วหากคุณพยายามที่จะรับ แนวคิดของรหัสนี้ทำอะไร และไม่ตั้งชื่อมันบอกว่ามันมีความสำคัญ (ถ้าส่วนที่เหลือของขอบเขตนั้นยาวมากฉันต้องอ่านทุกอย่างเพื่อบอกว่ามันเคยถูกใช้อีกครั้งหรือไม่แม้ว่าการใช้ขอบเขตย่อยที่ชัดเจนอาจเป็นอีกวิธีหนึ่ง ถ้าภาษาของคุณรองรับพวกเขา)จะใช้เพียงครั้งเดียวและบางครั้งก็เป็น
ซึ่งแสดงว่าทุกอย่างขึ้นอยู่กับบริบทและสิ่งที่คุณต้องการสื่อสาร เช่นเดียวกับการเขียนร้อยแก้วในภาษาธรรมชาติมีเสมอหลายวิธีที่จะเขียนชิ้นหนึ่งของรหัสที่มีพื้นเทียบเท่าในแง่ของเนื้อหาข้อมูล เช่นเดียวกับการเขียนร้อยแก้วในภาษาธรรมชาติวิธีที่คุณเลือกระหว่างพวกเขาโดยทั่วไปไม่ควรใช้กฎกลไกเช่น "กำจัดตัวแปรท้องถิ่นใด ๆ ที่เกิดขึ้นเพียงครั้งเดียว" ค่อนข้างจะเป็นอย่างไรคุณเลือกที่จะเขียนรหัสของคุณจะเน้นบางสิ่งและยกเลิกการเน้นผู้อื่น คุณควรพยายามทำให้ตัวเลือกเหล่านั้นอย่างมีสติ (รวมถึงตัวเลือกในการเขียนโค้ดที่อ่านได้น้อยลงด้วยเหตุผลทางเทคนิคในบางครั้ง) ขึ้นอยู่กับสิ่งที่คุณต้องการเน้น โดยเฉพาะอย่างยิ่งคิดเกี่ยวกับสิ่งที่จะให้บริการผู้อ่านที่ต้องการ "รับส่วนสำคัญ" ของโค้ดของคุณ (ในระดับต่าง ๆ ) เนื่องจากมันจะเกิดขึ้นบ่อยกว่าการอ่านแบบนิพจน์ - นิพจน์ที่ใกล้เคียงกันมาก