การตั้งชื่อฟิลด์บูลีนที่เป็นคำกริยา


14

ใน Java โดย getter การประชุมและตั้งค่าสำหรับเขตข้อมูลแบบบูลจะเป็นและisField() setField()นี้ทำงานได้อย่างสมบูรณ์ดีกับชื่อเขตที่มีคำคุณศัพท์ชอบactive, visible, closedฯลฯ

แต่ฉันจะตั้งชื่อฟิลด์ที่มีความหมายของคำกริยาได้haveChildrenอย่างไร เพิ่ม“ _ing” ในคำกริยา ( ) หรืออาจ?havingChildren

เพื่อชี้แจงฉันไม่สามารถควบคุมชื่อเมธอด (getter และ setter) เนื่องจากสร้างโดยอัตโนมัติโดย IDE ดังนั้นสิ่งที่ฉันต้องการคือชื่อเขตข้อมูลที่เหมาะสมเพื่อที่ว่าเมื่อ IDE สร้างผู้ทะเยอทะยานมันจะทำให้เกิดความรู้สึก ยกตัวอย่างเช่นhasChildrenเป็นชื่อเขตข้อมูลที่สมบูรณ์แบบ แต่เมื่อ IDE สร้าง getter isHasChildrenสำหรับฟิลด์มันจะ ฉันจะแก้ปัญหานี้ได้อย่างไร


3
ถ้านี่เป็นเขตบูลที่parentจะทำงาน
yannis

2
หากคุณสามารถหลบหลีกความหมายได้ 'ไร้เดียงสา' จะทำตามเคล็ดลับ
Kilian Foth

3
ดูเหมือนว่าจะงี่เง่าต้องกระโดดผ่านห่วงเกี่ยวกับชื่อของเขตข้อมูลเพื่อหลีกเลี่ยงปัญหาทางไวยากรณ์ที่เกิดจาก IDE โดยไม่คำนึงถึงต่อไปนี้เป็นคำแนะนำเพิ่มเติมถึงแม้ว่าฉันคิดว่าสิ่งที่ได้รับจากผู้อื่นดีกว่า: isAllowedChildren, isNotEmpty, isContainer, isLeaf,
Apprentice ของ Dr. Wily

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

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

คำตอบ:


11

คำตอบสั้น ๆ :

  • ชื่อเมธอดจะไม่ถูกแทนที่เพื่อสะท้อนการใช้งานภายใน แต่เป็นพฤติกรรมที่คาดหวัง

คำตอบยาว:

haveChildren()hasChildren()ควรตั้งชื่อ

นอกจากนี้ฉันไม่เห็นhasChildren()ว่าจำเป็นต้องเป็นผู้ทะเยอทะยานสำหรับสมาชิกของคลาสบูลีน ฉันเดาวิธีดังกล่าวจะพบว่าสมาชิกประเภทCollectionว่างเปล่าหรือไม่

ชื่อเริ่มต้นที่ IDE มอบให้แก่ผู้สร้างและผู้สร้างที่ไม่ได้ถูกแทนที่ด้วยกฎหมายที่กำหนด

อีกจุดหนึ่ง: อินเทอร์เฟซมีชื่อสำหรับวิธีที่ยังไม่ได้ใช้งาน

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

ยกตัวอย่างIteratorอินเตอร์เฟสใน Java

เมื่อคุณใช้Iteratorแม้เมื่อคุณมีสมาชิกบูลชื่อnextคุณจะไม่ได้ supossed ที่จะเปลี่ยนชื่อhasNext()ไปหรือisNext() isHavingNext()นั่นคือรายละเอียดการใช้งาน ในความเป็นจริงฉันได้ดำเนินการIteratorและสิ่งที่ฉันทำคือมีสมาชิกประเภทใดก็ตามที่ชั้นเรียนของฉันมีรายการชื่อnext(ไม่ใช่บูลีน) แล้วผลตอบแทนhasNext()next!=null

ดูสิ่งนี้ด้วย:

class patient {
      private boolean pulse;
      private boolean breaths:
      public boolean isDead(){ return (!pulse & !breaths);}
}

โปรดทราบว่าisDead()ไม่ใช่ทะเยอทะยานปกติ

ใช้เครื่องมือเพิ่มประสิทธิภาพของ IDE สำหรับสิ่งที่เป็น


3

ฉันขอแนะนำให้เปลี่ยนชื่อสนามparentเพื่อที่ทะเยอทะยานจะเป็นและจะเป็นหมาisParentsetParent

คุณยังสามารถลองchildPresentใช้ชื่อตัวแปรและisChildPresentและsetChildPresentในฐานะ getter และ setter


1
แนวคิดเดียวกันกับความคิดเห็นของ Yannis ด้านบน แต่ปัญหาคือฉันมีparentฟิลด์สำหรับเก็บการอ้างอิงไปยังวัตถุพาเรนต์แล้ว ฉันคิดว่าสิ่งที่ฉันต้องการคือกฎทั่วไปในการแปลงคำกริยาทั้งหมดเป็นคำคุณศัพท์สำหรับเขตข้อมูลบูลีน
dnang

0

คุณสามารถนำdoesหน้าคำกริยา เช่นdoesHaveChildrenในตัวอย่างที่คุณให้ หรืออาจจะshouldHaveChildrenขึ้นอยู่กับบริบท


1
ปัญหาคือฉันไม่สามารถควบคุมชื่อเมธอดได้เนื่องจากตัว getter และ setter นั้นสร้างขึ้นโดยอัตโนมัติโดย IDE (เช่น Eclipse)
dnang

1
เพียงเปลี่ยนชื่อวิธีหรือไม่ เพิ่มปุ่มลัดเพื่อเปลี่ยนชื่อวิธี (ถ้าคุณยังไม่มีวิธี)
miguel.martin

@dnhang หากเป็นรหัสของคุณคุณสามารถเรียกใช้วิธีการได้ตามที่คุณต้องการโดยไม่คำนึงว่า IDE เรียกว่าอะไรเมื่อสร้างอัตโนมัติ
Richard

1
@ miguel.martin เหตุผลหนึ่งที่คุณไม่ต้องการทำเช่นนี้คือ Java-beans การสันนิษฐานว่าisSomethingเป็นส่วนหนึ่งของข้อมูลจำเพาะนั้นและมีการตั้งสมมติฐานหลายอย่างเกี่ยวกับเรื่องนี้doesSomethingไม่ว่าจะดีหรือแย่กว่าการทำเช่นนี้ด้วยพินัยกรรมสามารถทำลายสิ่งต่าง ๆ ในรูปแบบที่ไม่ชัดเจนจนนำไปสู่ข้อบกพร่อง

0

คำถามนี้สมเหตุสมผลดี บางครั้งการเปลี่ยนชื่อวิธีที่สร้างขึ้นโดยอัตโนมัติไม่เพียงพอ ตัวอย่าง: คาดว่าถั่วที่ได้รับการจัดการของ JSF จะมีisXyz()วิธีการเป็น getter ของboolean xyzคุณสมบัติ

ฉันเห็นด้วยกับ BlackPanther ผู้แนะนำให้เปลี่ยนชื่อฟิลด์เป็นparentและใช้isParentเป็นชื่อเมธอด ตามหลักการการซ่อนข้อมูลความสามารถในการอ่านของ getter และ setter มีความสำคัญมากกว่าแอตทริบิวต์ของ

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