ปรัชญา / การใช้เหตุผลเบื้องหลังชื่อวิธีการปาสคาลของ C # คืออะไร


22

ฉันเพิ่งเริ่มเรียนรู้ C # มาจากพื้นหลังใน Java, C ++ และ Objective-C ฉันพบ Pascal-casing ของ method-ชื่อค่อนข้างไม่ซ้ำใครและตาดยากที่จะคุ้นเคยในตอนแรก อะไรคือเหตุผลและปรัชญาที่อยู่เบื้องหลังสิ่งนี้?

ฉันเดาว่าเป็นเพราะคุณสมบัติ C # ไม่เหมือนกับใน Objective-C โดยที่ชื่อเมธอดสามารถเหมือนกับตัวแปรอินสแตนซ์ได้ทุกกรณีนี่ไม่ใช่กรณีที่มี C # ฉันเดาว่าหนึ่งในเป้าหมายที่มีคุณสมบัติ (เช่นเดียวกับภาษาส่วนใหญ่ที่สนับสนุน) คือการทำให้คุณสมบัติไม่สามารถแยกแยะได้อย่างแท้จริงจากตัวแปรและวิธีการ ดังนั้นหนึ่งสามารถมี "int x" ใน C # และคุณสมบัติที่สอดคล้องกันกลายเป็น X เพื่อให้แน่ใจว่าคุณสมบัติและวิธีการจะแยกไม่ออกชื่อวิธีการทั้งหมดที่ฉันคาดเดาดังนั้นจึงคาดว่าจะเริ่มต้นด้วยตัวอักษรตัวพิมพ์ใหญ่ (นี่เป็นเพียงสมมติฐานของฉันตามสิ่งที่ฉันรู้เกี่ยวกับภาษา C # - ฉันยังคงเรียนรู้อยู่) ฉันอยากรู้มากว่าจะรู้ได้อย่างไรว่าแนวทางที่แปลกประหลาดนี้เกิดขึ้นได้อย่างไร

(แก้ไข: โดย Pascal-ปลอกฉันหมายถึง PascalCase (ซึ่งโดยทั่วไปแล้ว camelCase แต่เริ่มต้นด้วยอักษรตัวใหญ่) ชื่อวิธีโดยทั่วไปจะเริ่มต้นด้วยตัวอักษรตัวเล็กในภาษาส่วนใหญ่)


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

1
ทำไมคุณถึงคิดว่ามันถูกเรียกว่ากรณีPascal ?
R. Martinho Fernandes

1
@Martinho Fernandes เป็นชื่อมาตรฐานสำหรับสไตล์นี้ตรวจสอบ Google
Andrey

1
@Nocturne - ใช่ ฉันจะอยากรู้อยากเห็น :)
Joel Etherton

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

คำตอบ:


27

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

ฉันเดาได้เลยว่ามันคือAnders Hejlsbergซึ่งเป็นสถาปนิกของ Delphi ผู้สืบทอดของ Pascal ลักษณะตัวเรือนเหมือนกับใน C #


นี่จะเป็นคำตอบของฉัน : P
DevSolo

@DevSolo ขอโทษฉันเริ่มพิมพ์คำตอบเมื่อคำถามอยู่ที่ Stackoverflow :)
Andrey

ฉันคิดว่ารากหยั่งรากลึกลงไปในประวัติศาสตร์โบราณ - ดูคำตอบของฉันด้านล่าง :)
davka

20

หากคุณถามถึงเหตุผลนี่คือสิ่งหนึ่งตรงจากปากม้า:

ประวัติเกี่ยวกับ Pascal Casing และ Camel Casingโดย Brad Abrams ที่บล็อก MSDN

ในการออกแบบเบื้องต้นของ Framework เรามีการถกเถียงกันหลายร้อยชั่วโมงเกี่ยวกับรูปแบบการตั้งชื่อ เพื่อความสะดวกในการโต้วาทีเราได้กำหนดเงื่อนไขจำนวนหนึ่ง ด้วย Anders Heilsberg (ผู้ออกแบบดั้งเดิมของTurbo Pascal ) เป็นสมาชิกคนสำคัญของทีมงานออกแบบจึงไม่น่าแปลกใจที่เราเลือกคำ Pascal Casing สำหรับรูปแบบปลอกที่นิยมโดยภาษาการเขียนโปรแกรม Pascal ...

การประชุมPascal Casingใช้อักษรตัวแรกของคำแต่ละคำ (รวมถึงตัวย่อที่มีความยาวสองตัวอักษร) ...

และนี่คือแนวทางการออกแบบ: แนวทางการออกแบบสำหรับนักพัฒนาห้องสมุดคลาส

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


2
TurboPascalเป็นลูกของPhilip Kahn(aka Borland) ซึ่งสะดวกมากสำหรับ Microsoft ที่จะลืม การเมือง ....
davka

1
ความคิดเห็นในลิงค์แรกนั้นเยี่ยมมากฮ่า ๆ
jmq

7

ไม่ทราบเกี่ยวกับปรัชญา แต่ปลอก Pascal ดูเหมือนจะเป็นเรื่องธรรมดาในแพลตฟอร์ม Microsoft ตั้งแต่อย่างน้อย Win32 API วัน


8
และฉันก็ยังเกลียดมันฮ่า ๆ
jmq

2

ฉันไม่คิดว่าจะมีปรัชญาเฉพาะอยู่ข้างหลัง จำเป็นต้องมีแนวทางและมีหลายจุดที่อาจกระทบ:

  • พวกเขาต้องการกำจัดสัญลักษณ์นำหน้า (อ่านภาษาฮังการีที่นี่)
  • พวกเขาต้องการให้สมาชิกในท้องถิ่น / ส่วนตัวและสมาชิกสาธารณะมีความโดดเด่นเพียงแค่อ่านชื่อของพวกเขา
  • พวกเขาไม่ต้องการให้โค้ด C # ดูเหมือนรหัส Java (ซึ่งใช้ตัวพิมพ์ใหญ่อูฐ)

โปรดทราบว่าแนวทางการตั้งชื่อนี้มีไว้สำหรับ. NET Framework และไม่ใช่ C # โดยเฉพาะ ใน VB.NET ภาษาที่คำนึงถึงขนาดตัวพิมพ์การประชุมยังคงเหมือนเดิม แต่คุณไม่สามารถใช้มันแยกแยะความแตกต่างระหว่างสมาชิกส่วนตัวและสาธารณะตามกรณี
R. Martinho Fernandes

@Martinho: เห็นด้วย แต่ฉันก็ยังรู้สึกว่าเป็นหนึ่งในเหตุผล
decyclone

7
+1: "พวกเขาไม่ต้องการให้โค้ด C # ดูเหมือนรหัส Java (ซึ่งใช้ตัวอูฐอย่างหนัก)": ฉันสงสัยอย่างยิ่งว่าคุณอยู่ที่นี่!
Giorgio

สิ่งที่น่าสังเกตก็คือแม้จะมีความเกลียดชังของคนฮังการีเกี่ยวกับสัญกรณ์ Java และ C # น่าจะมีทั้งภาษาที่ดีกว่ามากในทางปฏิบัติถ้าพวกเขาได้นำ Apps Hungarian (หรือระเบียบการตั้งชื่ออื่น ๆ ) มาแยกแยะ ระบุไว้ดังนั้นผู้ที่ระบุอินสแตนซ์ที่เปลี่ยนแปลงไม่ได้ที่จะต้องไม่ถูกทำให้กลายพันธุ์เป็นต้นแม้ว่า Runtime จะไม่สนใจความแตกต่างดังกล่าวก็เป็นไปไม่ได้ที่จะเขียนโค้ดที่มีประสิทธิภาพและถูกต้องโดยไม่ทราบว่าตัวแปรใด
supercat

0

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

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


5
ไม่ที่ไม่ลืมเสียงกระเพื่อมสไตล์การตั้งชื่อ!
R. Martinho Fernandes

@Martinho Fernandes จริง ๆ แล้วในบริบทของภาษา c-like มันไม่ถูกต้อง
Andrey

ใช่เสียงกระเพื่อมคำนึงถึงช่องว่าง (- var1 var2)
Michael K

@Martinho Fernandes: แน่นอนว่าต้องใช้ช่องว่างเพื่อแยกโทเค็น นอกจากนี้ยังเป็นภาษาโคบอล - สไตล์ - ชื่อซึ่งทำให้เป็นเรื่องธรรมดาสำหรับภาษาที่ฉันชื่นชมและชื่นชมน้อยที่สุด
David Thornley

0

(แต่ไม่ใช่เหตุผลที่ไม่สมเหตุสมผล IMHO) คาดเดา - การออกแบบ C # ได้รับการดูแลโดยNiklaus Wirthผู้ประดิษฐ์ดั้งเดิมของ Pascal ดูการเชื่อมต่อหรือไม่ ... :)

อยากรู้อยากเห็น # 1: ฉันจำการประกาศของ. NET และ C # ในเชิงบวก (ใช่ฉันเป็นยุคก่อนประวัติศาสตร์ ... ) และวิธีการที่ Microsoft โม้ด้วยการมีชื่อของ Wirth ใน C # กระนั้นหน้า Wikipedia บนทั้ง (C # และ Wirth) พูดถึงสิ่งนี้

อยากรู้อยากเห็น # 2: แม้ว่ามันจะถูกเรียกว่าPascalCaseมันเป็นที่นิยมโดยTurboPascalคอมไพเลอร์ (ซึ่งในที่สุดก็กลายเป็นBorland) ไม่ใช่ภาษาตัวเอง


4
และ TurboPascal ได้รับการออกแบบและสร้างโดยสะดวกสบายโดย Anders Hejlsberg ...
SWeko

3
Anders Hejlsberg เป็น IIRC ผู้นำด้านการออกแบบของ Delphi และทำงานอย่างหนักกับ Turbo Pascal แต่ Turbo Pascal ไม่ใช่ลูกของเขา แต่เดิม (เป็น Philip Kahns) Niklaus Wirth ได้ประดิษฐ์Pascal ดั้งเดิมและนำมาผ่านมาตรฐานแล้วเห็นมาตรฐานส่วนใหญ่ที่ไม่สนใจ นอกจากนี้เวิร์ ธ ยังเกษียณมาเกือบตลอดชีวิตของ C # และก่อนหน้านั้นได้ออกแบบภาษาที่สืบทอดมาเป็นภาษา Pascal หลายภาษา (ล่าสุดคือ Oberon 2) ดังนั้นฉันจึงสงสัยว่าเขามีส่วนเกี่ยวข้องโดยตรงเลย Microsoft โม้เสียงดังเกี่ยวกับการมี Hejlsberg อยู่บนเครื่อง Turbo Pascal เป็นผลิตภัณฑ์ Borland ตั้งแต่เริ่มต้น
Steve314

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