ชื่อเมธอด Java ยาวเกินไปเมื่อใด [ปิด]


173

ในสัปดาห์ที่ผ่านมาฉันเคยเห็นผู้ชายบางคนใช้ชื่อยาวมากสำหรับวิธีการหรือคลาส (50 ตัวอักษร) ซึ่งมักจะอยู่ภายใต้สมมติฐานที่ปรับปรุงการอ่านง่ายความคิดเห็นของฉันคือชื่อยาวเช่นนี้เป็นตัวบ่งชี้ว่าเราเป็น พยายามทำมากหรือมากเกินไปในคลาสเมธอดถ้าเราต้องการชื่อยาว ๆ แต่ฉันอยากรู้ว่าพวกคุณคิดอย่างไร

ตัวอย่างคือ:

getNumberOfSkinCareEligibleItemsWithinTransaction

19
ใช่มันเป็น "รหัสกลิ่น" ... c2.com/cgi/wiki?LongMethodSmell
Dan Rosenstark

23
เมื่อมันยาว> 666 ตัวอักษรคุณจะรู้ว่าคุณมีปัญหา
Thomas Eding

8
@yar ในตัวอย่างของคุณตรงกันข้ามกับ "วิธีการแบบยาว" คือ "วิธีการแบบสั้น" ซึ่งถือว่าเป็นสิ่งที่ดี ดังนั้นจึงเห็นได้ชัดว่าไม่ได้อ้างถึงชื่อเมธอด มันหมายถึงบรรทัดของรหัส (หรือสิ่งที่คล้ายกัน) ตัวอย่างเช่นf()เป็นฟังก์ชั่นที่สั้นมาก แต่ก็ไม่แน่นอนการปฏิบัติที่ดี ... และสิ่งที่คุณควรจะบอกนักคณิตศาสตร์บางโปรแกรมออกมี :)
sfussenegger

3
@ sfussenegger มันเป็นเรื่องจริง แต่ฉันเดิมพันในความสัมพันธ์ระหว่างความยาวชื่อเมธอดและความยาวเมธอด f()อาจไม่ใช่ฟังก์ชั่นที่ยอดเยี่ยม แต่$()ผู้ชายคนนั้นเหมือนร็อคสตาร์ในโลกของวิธีการ Javascript
Dan Rosenstark

7
@yar ลิงค์ที่คุณให้เรียกความยาวของวิธีการในสายที่ไม่ได้ความยาวของวิธีการที่ชื่อ
Thorbjørn Ravn Andersen

คำตอบ:


398

ชื่อใน Java หรือภาษาอื่น ๆ ยาวเกินไปเมื่อมีชื่อที่สั้นกว่าที่มีความหมายพอ ๆ กันกับพฤติกรรมของวิธีการ


65
สง่างามทางคณิตศาสตร์
Ricket

304
ดังนั้นสำหรับตัวอย่างเช่นboolean doesShorterNameExistThatEquallyConvaysTheBehaviorOfTheMethod(String s)ควรจะ refactored boolean isTooLong(String s)ไป
z5h

6
ฉันไม่เห็นด้วยเพราะคุณไม่เพียง แต่ต้องการถ่ายทอดพฤติกรรม แต่ยังรักษาระเบียบปฏิบัติของโครงการและภาษา ดังนั้นในหลามคุณอาจพูดแต่ในชวาที่คุณมักจะพูดว่าeligible_items_cnt getEligibleItemsCount
flybywire

17
@flybywire: การประชุมใด ๆ ที่ทำให้คุณเขียนชื่อที่ยาวเกินไปมีประโยชน์ที่น่าสงสัย
MAK

20
@MAK @ S.Lott เกี่ยวgetLength()กับlength()อะไร ฉันชอบที่จะดูการเติมข้อความอัตโนมัติหลังจากพิมพ์ 'get' หรือ 'set' - ดังนั้นฉันจึงชอบการย่อส่วนมากกว่าความรัดกุมในกรณีนี้
sfussenegger

202

เทคนิคบางอย่างสำหรับการลดความยาวของชื่อเมธอด:

  1. หากโปรแกรมหรือคลาสหรือโมดูลของคุณเกี่ยวกับ 'รายการดูแลผิว' คุณสามารถทิ้งการดูแลผิว ตัวอย่างเช่นถ้าชั้นของคุณถูกเรียกSkinCareUtilsนั่นจะนำคุณมาgetNumberOfEligibleItemsWithinTransaction

  2. คุณสามารถเปลี่ยนภายในไปใน ,getNumberOfEligibleItemsInTransaction

  3. คุณสามารถเปลี่ยนการทำธุรกรรมที่จะ Tx getNumberOfEligibleItemsInTxซึ่งทำให้คุณได้รับ

  4. หรือถ้าวิธีการยอมรับ param ประเภทTransactionคุณสามารถวาง InTx ทั้งหมด:getNumberOfEligibleItems

  5. คุณเปลี่ยน numberOf โดยนับ: getEligibleItemsCount

ตอนนี้มันสมเหตุสมผลมาก และสั้นกว่า 60%


11
นอกจากนี้ 5) จะใส่getEligibleItems()และgetEligibleItemsCount()ติดกันในรายการเรียงตามลำดับตัวอักษร (เช่นการเติมข้อความอัตโนมัติหรือ javadoc)
sfussenegger

4
และตามปกติแล้วชื่อที่สั้นกว่าจะเข้ากันได้กับกฎไฮกุ
พะยอม

2
@mercator การใช้แบบแผนมาตรฐานเช่น getEligibleItems มากกว่า countEligibleItems จะช่วยลดโอกาสที่จะเกิดความกำกวมในคำสั่ง ความคลุมเครือที่น้อยลงในสิ่งที่วิธีการนั้นควรจะเพิ่มขึ้นทำให้เกิดความพร้อมในการอ่าน วิธีการที่ "นับ" นั้นชัดเจนน้อยกว่าวิธีที่ "รับ" ทำสำเร็จในระยะยาว
Bill

53
ฉันไม่ชอบ abbr เช่นTx, Cnt, grphและอื่น ๆ ... (BTW, Txสั้นสำหรับ "เกียร์" หรือ "ส่งสัญญาณ")
Meinersbur

14
ใช่ฉันเห็นด้วยกับคุณจนกว่าคุณจะตัดสินใจใช้ "Tx"
Ponkadoodle

183

เพียงเพื่อการเปลี่ยนแปลงคำตอบที่ไม่ใช่อัตนัย: 65536 ตัวอักษร

A.java:1: การแทน UTF8 สำหรับสตริง "xxxxxxxxxxxxxxxxxxxxxx ... " ยาวเกินไปสำหรับพูลคงที่

;-)


4
ใช่ยาวเกินไปเมื่อ JVM ลาดเทจัดการกับมันไม่มี MO :)
Anurag

35
+1 สำหรับคำตอบที่แท้จริง
พะยอม

37
ในทางเทคนิคแล้วข้อกำหนดภาษา Java ไม่ได้มีข้อ จำกัด สูงสุดสำหรับความยาวของตัวระบุ นี่เป็นข้อ จำกัด ของการใช้ JVM ของคุณ ไชโย!
uckelman

13
เห็นได้ชัดว่าคอมไพเลอร์ของซอนไม่สอดคล้องกับสเป็ค java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.8พูดว่า: "ตัวระบุเป็นลำดับความยาวไม่ จำกัด ... "
Michael Myers

6
ข้อมูลจำเพาะ JVM จะมีขีด จำกัด บนเป็นข้อผิดพลาดชี้ให้เห็น แทนสระว่ายน้ำคงที่ของ utf8 ถูก จำกัด ให้ 2 ^ 16 ไบต์ที่ระบุไว้ที่นี่ ชื่อคลาสและชื่อเมธอดต้องถูกเก็บเป็น utf8 ในพูลคงที่
thejoshwolfe

42

ฉันเห็นด้วยกับทุกคน: ชื่อวิธีการไม่ควรยาวเกินไป ฉันต้องการเพิ่มข้อยกเว้นหนึ่งข้อแม้ว่า:

อย่างไรก็ตามชื่อของวิธีทดสอบ JUnit อาจมีความยาวและควรมีลักษณะคล้ายประโยค

ทำไม?

  • เพราะพวกเขาไม่ได้เรียกในรหัสอื่น ๆ
  • เพราะพวกมันถูกใช้เป็นชื่อทดสอบ
  • เพราะพวกเขาสามารถเขียนเป็นประโยคอธิบายข้อกำหนด (ตัวอย่างเช่นการใช้AgileDox )

ตัวอย่าง:

    @Test
    public void testDialogClosesDownWhenTheRedButtonIsPressedTwice() {
        ...
    }

ดู " การออกแบบพฤติกรรมขับเคลื่อน " สำหรับข้อมูลเพิ่มเติมเกี่ยวกับแนวคิดนี้


5
+1 ผมเห็นด้วยกับมันและมันก็ยังเป็นสิ่งที่ฉันทำแม้ว่า JUnit 4 วิธีไม่จำเป็นต้องเริ่มต้นด้วยtestอีกต่อไปเปิดยังเป็นไปได้ในการใช้งานไม่ว่าจะเป็นshould dialogShouldCloseWhenTheRedButtonIsPressedTwice()หรือคุณสามารถเรียกคลาสทดสอบDialogShouldจากนั้นจึงใช้วิธีcloseWhenTheRedButtonIsPressedTwice()อ่านด้วยกัน: DialogShould.closeWhenTheRedButtonIsPressedTwice().
stivlo

ในขณะที่ฉันเห็นด้วยฉันขอแนะนำว่าประโยคที่ยาวเกินไปอาจแนะนำการทดสอบที่ทำมากเกินไป!
Brian Agnew

17

บริบท "... InsideTransaction" ควรชัดเจน นั่นคือสิ่งที่เกี่ยวกับการวางแนววัตถุ

วิธีการเป็นส่วนหนึ่งของชั้นเรียน ถ้าคลาสไม่ได้แปลว่า "ธุรกรรม" - และถ้ามันไม่ช่วยให้คุณไม่ต้องพูดว่า "InsideTransaction" ตลอดเวลาแสดงว่าคุณมีปัญหา


2
สามารถใช้พารามิเตอร์การทำธุรกรรมบางประเภทได้เช่นกัน
willcodejavaforfood

3
อย่างที่คุณสามารถบอกได้จากคำตอบที่ให้คะแนนดีที่สุดด้านบนไปเพื่อความเรียบง่ายแบบชนบทห่างไกลแทนที่จะเป็นคำแนะนำ OO +1
Dan Rosenstark

@ ยาผู้คนไม่เคยผิด
CurtainDog

12

ฉันมักจะใช้กฎไฮกุสำหรับชื่อ:

 Seven syllable class names 
 five for variables
 seven for method and other names

เหล่านี้เป็นกฎของหัวแม่มือสำหรับชื่อสูงสุด ฉันละเมิดสิ่งนี้เฉพาะเมื่อปรับปรุงความสามารถในการอ่าน recalculateMortgInterest (currentRate, quoteSet ... ) ดีกว่าการคำนวณ recalculateMortgInterestRate หรือ recalculateMortgInterestRateFromSet เนื่องจากความจริงที่ว่ามันเกี่ยวข้องกับอัตราและชุดของราคาที่ควรจะค่อนข้างชัดเจนจาก docs ฝังตัวเช่น javadoc หรือเทียบเท่า. NET

หมายเหตุ: ไม่ใช่ไฮกุจริง ๆ เพราะมันเป็น 7-5-7 มากกว่า 5-7-5 แต่ฉันก็ยังชอบเรียกมันว่าไฮกุ


13
คลาสเรียนมีเจ็ดตัวแปรน้อยกว่าห้าและเจ็ดส่วนที่เหลือ
เจมส์

8
"ตัวแปรไม่เกินห้าตัว" (น้อยกว่าห้าตัวไม่ถูกต้อง)
Jason S

ชื่อที่เล็กลงอาจทำให้การอ่านโค้ดต่ำลง
Deniss M.

10

Java มีวัฒนธรรมของการส่งเสริมชื่อยาวบางทีอาจเป็นเพราะ IDEs มาพร้อมกับการเติมข้อความอัตโนมัติที่ดี

ไซต์นี้บอกว่าชื่อคลาสที่ยาวที่สุดใน JRE นั้นInternalFrameInternalFrameTitlePaneInternalFrameTitlePaneMaximizeButtonWindowNotFocusedStateยาว 92 ตัวอักษร

สำหรับชื่อเมธอดที่ยาวที่สุดฉันได้พบอันนี้supportsDataDefinitionAndDataManipulationTransactionsซึ่งก็คือ 52 ตัวอักษร


20
ดูเหมือนว่าคลาสนั้นจะถูกตั้งชื่อโดยคนตั้งชื่อที่จ้างโดยกรม Redundancy Deparment เพื่อตั้งชื่อสิ่งต่าง ๆ ที่กรม Redundancy
Michael Madsen

1
@MichaelMadsen: มันซ้ำซ้อนจริง ๆ หรือมันอธิบายเฟรมที่ซ้อนกันภายในเฟรมอื่นได้หรือไม่
endolith

PEP-8 ต้องการคำที่มีชื่อคลาสนั้น
Mateen Ulhaq

9

อย่าใช้คำยาว ๆ เมื่อคำสั่งจิ๋วจะทำ

ฉันไม่คิดว่าวิทยานิพนธ์ของคุณ "ความยาวของชื่อวิธีเป็นสัดส่วนกับความยาวของวิธีการ" ถือน้ำจริงๆ

นำตัวอย่างที่คุณให้: "getNumberOfSkinCareEligibleItemsWithinTransaction" ฟังดูเหมือนว่าฉันจะทำสิ่งเดียว: นับจำนวนรายการในธุรกรรมที่ตกอยู่ในหมวดหมู่ที่แน่นอน แน่นอนว่าฉันไม่สามารถตัดสินได้โดยไม่เห็นรหัสที่แท้จริงสำหรับวิธีการ แต่ดูเหมือนว่าเป็นวิธีที่ดีสำหรับฉัน

ในทางกลับกันฉันได้เห็นวิธีการมากมายที่มีชื่อที่สั้นและกระชับซึ่งทำให้วิธีการทำงานมากมายเช่น "processSale" หรือ "doStuff" ที่เป็นที่นิยม

ฉันคิดว่ามันคงเป็นเรื่องยากที่จะกำหนดกฎอย่างหนักและรวดเร็วเกี่ยวกับความยาวชื่อเมธอด แต่เป้าหมายควรยาวพอที่จะถ่ายทอดสิ่งที่ฟังก์ชั่นสั้นพอที่จะอ่านได้ ในตัวอย่างนี้ฉันคิดว่า "getSkinCareCount" น่าจะเพียงพอแล้ว คำถามคือสิ่งที่คุณต้องการแยกแยะ หากคุณมีฟังก์ชั่นหนึ่งที่นับรายการที่มีสิทธิ์ดูแลผิวในการทำธุรกรรมและอีกรายการหนึ่งที่นับรายการที่มีสิทธิ์ดูแลผิวในสิ่งอื่นแล้ว "ภายในธุรกรรม" เพิ่มมูลค่า แต่ถ้ามันไม่ได้มีความหมายอะไรที่จะพูดคุยเกี่ยวกับรายการดังกล่าวนอกเหนือจากการทำธุรกรรมแล้วไม่มีจุดถ่วงชื่อด้วยข้อมูลที่ฟุ่มเฟือยดังกล่าว

สองฉันคิดว่ามันไม่สมจริงอย่างที่คิดว่าชื่อของความยาวที่สามารถจัดการได้จะบอกคุณว่าฟังก์ชั่นนี้ทำอะไรได้บ้าง แต่เป็นกรณีที่น่ารำคาญที่สุด เป้าหมายที่สมจริงคือสร้างชื่อที่ให้เบาะแสผู้อ่านและสามารถจดจำได้ในภายหลัง เช่นถ้าฉันพยายามหารหัสที่คำนวณว่าปฏิสสารที่เราต้องใช้เพื่อให้ได้ความเร็ววาร์ปถ้าฉันดูชื่อฟังก์ชั่นและดู "calibrateTransporter", "firePhasers" และ "calcAntimatterBurn" มันค่อนข้างชัดเจนว่า สองอันแรกไม่ใช่มัน แต่อันที่สามอาจเป็น ถ้าฉันตรวจสอบและพบว่าเป็นสิ่งที่ฉันกำลังมองหามันจะเป็นการง่ายที่จะจำได้ว่าเมื่อฉันกลับมาพรุ่งนี้เพื่อแก้ไขปัญหานี้อีก นั่นดีพอ

ชื่อยาวสามชื่อที่คล้ายกันทำให้สับสนมากกว่าชื่อสั้น ๆ หากฉันมีฟังก์ชั่นสองอย่างที่เรียกว่า "calcSalesmanPay" และ "calcGeekPay" ฉันสามารถคาดเดาได้อย่างรวดเร็วว่าเป็นแบบไหน แต่ถ้าพวกเขาถูกเรียกว่า "calculMonthlyCheckAmountForSalesmanForExportToAccountingSystemAndReconciliation" และ "calculMonthlyCheckAmountForProgrammersForExportToAccountingSystemAndReconciliation" (ฉันต้องศึกษาชื่อเพื่อดูว่าตัวไหนเป็นแบบไหน ข้อมูลเพิ่มเติมในชื่อนั้นอาจมีผลในกรณีดังกล่าว เปลี่ยนความคิดครึ่งวินาทีเป็นความคิด 30 วินาที


+1 สำหรับคำตอบที่ไม่ดีนี้ซึ่งได้รับความเดือดร้อน
Dan Rosenstark

7

ออกแบบอินเทอร์เฟซของคุณในแบบที่คุณต้องการและทำการจับคู่การใช้งาน

ตัวอย่างเช่นบางทีฉันอาจจะเขียนว่าเป็น

getTransaction().getItems(SKIN_CARE).getEligible().size()

หรือกับสตรีม Java 8:

getTransaction().getItems().stream()
    .filter(item -> item.getType() == SKIN_CARE)
    .filter(item -> item.isEligible())
    .count();

6

กฎของฉันมีดังนี้: หากชื่อยาวจนต้องปรากฏในบรรทัดของมันเองมันก็ยาวเกินไป (ในทางปฏิบัติหมายความว่าฉันไม่ค่อยมีอักขระเกิน 20 ตัว)

นี้ขึ้นอยู่กับการวิจัยแสดงให้เห็นว่าจำนวนของเส้นแนวตั้งที่มองเห็นได้ของรหัสมีความสัมพันธ์เชิงบวกกับความเร็วในการเข้ารหัส / ประสิทธิผล หากชื่อคลาส / วิธีการเริ่มทำร้ายอย่างมีนัยสำคัญพวกเขาจะยาวเกินไป

เพิ่มความคิดเห็นที่มีการประกาศเมธอด / คลาสและให้ IDE นำคุณไปที่นั่นหากคุณต้องการคำอธิบายแบบยาวเกี่ยวกับสิ่งที่มันมีไว้


ฉันชอบกฏเช่นนี้ ตราบใดที่คุณจำไว้ว่าคุณ / ทีมของคุณสร้างมันขึ้นมาแบบสุ่มทุกอย่างก็ดี ในทางกลับกันฉันไม่สามารถลงคะแนนได้เพราะ "การแสดงการวิจัย" จะต้องมีลิงก์ไปยังการวิจัยนั้นหรือบางอย่างเกี่ยวกับเรื่องนี้ ...
Dan Rosenstark

5

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


3

เมื่อคุณกำลังจะเขียนชื่อเมธอดในครั้งถัดไปแค่คิดว่าคำพูดที่ร้อง

"The man who is going to maintain your code is a phyco who knows where you stay"

13
สิ่งที่ดีเขาเป็นแค่สาหร่ายและไม่ใช่ 'โรคจิต'
StingyJack

2

ชื่อวิธีนั้นยาวเกินไปอย่างแน่นอน ใจของฉันมีแนวโน้มที่จะเร่าร้อนเมื่อฉันอ่านชื่อวิธีการขนาดดังกล่าว มันเหมือนกับการอ่านประโยคที่ไม่มีช่องว่าง

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

"getNumberOfSkinCareEligibleItemsWithinTransaction" อาจกลายเป็น:

com.mycompany.app.product.SkinCareQuery.getNumEligibleItems ();

จากนั้นเมื่อใช้งานวิธีการอาจมีลักษณะ "query.getNumEligibleItems ()"


2

ชื่อตัวแปรยาวเกินไปเมื่อชื่อที่สั้นกว่าจะช่วยให้อ่านรหัสได้ดีขึ้นในทั้งโปรแกรมหรือส่วนสำคัญของโปรแกรม

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

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

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

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

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


1

เช่นเดียวกับภาษาอื่น ๆ : เมื่อมันไม่ได้อธิบายการกระทำเดียวฟังก์ชั่นจะดำเนินการอีกต่อไป


1

ฉันว่าจะใช้คำตอบที่ดีและมีเหตุผล

อธิบายอย่างชัดเจนชัดเจนและอ่านง่ายว่าวิธีการนี้ทำอะไร

ถ้าชื่อเมธอดยาวเกินไปให้ทำการรีแฟคเตอร์ให้น้อยลง


1

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

แต่! หากชื่อยาวเกินไปอาจเป็นชื่อยาวเกินไป วิธีรับคือเขียนรหัสของคุณในลักษณะที่คุณอยู่ในบริบทและชื่อสั้น แต่ซ้ำในบริบทอื่น ๆ เหมือนเมื่อคุณสามารถพูดว่า "เธอ" หรือ "เขา" ในภาษาอังกฤษแทนที่จะเป็นชื่อเต็มของใครบางคน


1

มันยาวเกินไปเมื่ออธิบายด้วยวาจาอย่างเกินไป

ตัวอย่างเช่นชื่อเหล่านี้เทียบเท่ากับหน้าที่

ใน Java: java.sql.SQLIntegrityConstraintViolationException

ใน Python / Django: django.db.IntegrityError

ถามตัวคุณเองในแพ็คเกจ SQL / db คุณจะพบข้อผิดพลาดด้านความสมบูรณ์อีกจำนวนเท่าใด ;) db.IntegrityErrorก็เพียงพอแล้ว


คุณสามารถโต้แย้งวิธีอื่นได้เสมอ เมื่อมันอธิบายด้วยวาจาอย่างชัดเจนว่าสิ่งที่เกี่ยวกับมันชัดเจนว่าสิ่งที่วิธีการอื่นมันอาจทำให้เกิดความสับสนและอาจกระตุ้นการใช้วิธีการที่ไม่ถูกต้อง
Jonas Geiregat

0

ชื่อตัวระบุยาวเกินไปเมื่อเกินความยาวที่คอมไพเลอร์ Java ของคุณสามารถจัดการได้


3
อะไร?! ฉันไม่เห็นสาเหตุที่ฉันถูกลงคะแนนสำหรับเรื่องนี้ คำถามไม่ได้ถามเงื่อนไขที่จำเป็นเพียงอย่างเดียวเท่านั้น!
uckelman

0

มีสองวิธีหรือมุมมองที่นี่: หนึ่งคือมันไม่สำคัญว่านานแค่ไหนชื่อวิธีตราบใดที่มันเป็นคำอธิบายที่เป็นไปได้ที่จะอธิบายสิ่งที่วิธีการทำ (Java ปฏิบัติที่ดีที่สุดกฎพื้นฐาน) ในทางตรงกันข้ามฉันเห็นด้วยกับการโพสต์ flybywire เราควรใช้ความฉลาดของเราเพื่อพยายามลดชื่อเมธอดให้มากที่สุด แต่ไม่ลดความหมายลง คำอธิบายสำคัญกว่า :)


0

ชื่อยาวเกินไปถ้ามัน:

  • ใช้เวลาอ่านมากกว่า 1 วินาที
  • ใช้ RAM มากกว่าที่คุณจัดสรรให้กับ JVM ของคุณ
  • มันเป็นชื่อที่ไร้สาระ
  • หากชื่อที่สั้นลงทำให้รู้สึกที่สมบูรณ์แบบ
  • ถ้ามันล้อมรอบใน IDE ของคุณ

โดยสุจริตชื่อจะต้องสื่อถึงจุดประสงค์ของมันต่อนักพัฒนาที่จะใช้มันเป็นวิธีการสาธารณะ API หรือต้องรักษารหัสเมื่อคุณออกจาก แค่จำ KISS (ทำให้มันโง่ง่าย ๆ )

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.