ประโยชน์ของชื่อพารามิเตอร์ฟังก์ชันคำนำหน้าด้วย p * คืออะไร


22

ฉันมักจะเห็นโครงการ (ในโครงการ Java และทีมงานใช้ Eclipse) pที่พารามิเตอร์ฟังก์ชั่นที่มีคำนำหน้า

ตัวอย่างเช่น

public void filter (Result pResult) ...

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

คำตอบ:


34

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


10
สัญกรณ์ระบบฮังการีเป็นวิธีปฏิบัติที่แย่มากที่ควรหลีกเลี่ยง ในทางกลับกันแอพฮังการีบางแอปมีประโยชน์ (เช่นเพื่อป้องกันการป้อนข้อมูลผู้ใช้ที่ไม่ปลอดภัยจากการใช้ผิดวัตถุประสงค์)
Casey Kuball

7
@Darthfett: แม้กระทั่งสัญกรณ์ของฮังการีก็ดูเหมือนว่าจะพยายามนำระบบเฉพาะกิจมาใช้ในชื่อตัวแปรโดยตรง เพียงใช้ภาษาที่มีการพิมพ์แบบสแตติกที่ดีและมีระบบแบบเรียลไทม์ติดตามสิ่งต่าง ๆ เช่นนั้นให้คุณโดยอัตโนมัติ!
Tikhon Jelvis

1
@WyattBarnett Systems ชาวฮังการีไม่ได้ให้ข้อมูลที่เป็นประโยชน์กับโปรแกรมเมอร์ที่ทันสมัย Apps Hungarian สามารถลดอาการปวดหัวในการตรวจสอบโค้ดเมื่อมีการบังคับใช้อย่างถูกต้อง
Casey Kuball

2
@TikhonJelvis ไม่ใช่ทุกภาษาที่สนับสนุน typedefs ที่มีการบังคับใช้อย่างมาก (เช่นC ++ typdefs ) สำหรับภาษาที่รองรับคุณค่อนข้างถูกต้อง
Casey Kuball

4
@Darthfett: ใน C / C ++ คุณสามารถห่อมันด้วยstruct/ unionด้วยองค์ประกอบเดียว
Maciej Piechotka

9

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


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

5

ฉันใช้คำนำหน้าพารามิเตอร์เฉพาะเมื่อพารามิเตอร์นั้นตั้งใจให้กำหนดให้กับตัวแปรสมาชิกเช่นตัวสร้างหรือ setter

Paint (newColor) {
  color = newColor;
}

สำหรับฉันฉันพบว่าการใช้ชื่อตัวแปรที่แตกต่างนั้นชัดเจนกว่าการใช้คำนำหน้า "this"

สำหรับสถานการณ์อื่น ๆ ฉันหลีกเลี่ยงการใช้พารามิเตอร์ที่อาจสับสนได้ง่ายกับตัวแปรสมาชิก

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


โดยส่วนตัวฉันชอบที่จะย่อชื่อพารามิเตอร์ในกรณีนั้น (เช่น, Paint (clr) { color = clr; }) ... โดยปกติจะมีความกำกวมไม่มากถึงแม้color -> clrโดยเฉพาะอาจเป็นข้อยกเว้น
Justin เวลา 2 Reinstate Monica

1

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

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


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

1

สั้น - การฝึกฝนนี้ทำให้อ่านรหัสยากขึ้น

ยาว - ฉันจะเถียงว่ามันเป็นการปฏิบัติที่ไม่ดีที่ใช้เพื่อสนับสนุนการปฏิบัติที่ไม่ดีอื่น ๆ เท่านั้น ลองตรวจสอบสองสามเหตุผลว่าทำไมการใช้คำนำหน้าอาจมีประโยชน์

  • หลีกเลี่ยงการชนในชื่อตัวแปร

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

    public void setHeight(int newHeight) { this.height = newHeight; }

  • วิธีการใช้ params จำนวนมากประกาศตัวแปรจำนวนมากและเราสามารถลืมได้อย่างง่ายดายว่าอันไหนเป็นพารามิเตอร์

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

ยกเว้นบางกรณีการเพิ่มคำนำหน้าพารามิเตอร์จะช่วยเฉพาะกับอาการและไม่แก้ปัญหาจริง


0

ฉันเป็นแฟนตัวยงของ iParam สำหรับในและ oParam สำหรับพารามิเตอร์ ฉันจะบอกว่า cParam เปลี่ยนแปลง แต่นั่นก็ไม่เป็นที่ยอมรับ


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