หนึ่งโปรแกรมเมอร์หลายภาษา - ชื่อขึ้นเขียง


14

เมื่อคุณทำงานกับการเขียนโปรแกรมหลายภาษามีปัญหาที่คุณประสบ ...

ชื่อ (ตัวระบุ) ที่ถูกต้องในภาษาหนึ่งไม่ถูกต้องในภาษาอื่น ตัวอย่างเช่น...

var new function thisเป็นคำหลักใน JavaScript แต่คุณสามารถใช้ได้อย่างอิสระใน Python ในทำนองเดียวกันlist dict defสามารถใช้ใน JavaScript ได้โดยไม่มีปัญหา

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

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

ดังนั้นคำถามของฉันคือกลยุทธ์ใดที่คุณใช้ ...

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

(หมายเหตุ: ฉันกำลังพูดถึง Python และ JavaScript ในคำถามนี้เท่านั้น แต่โปรดตอบคำถามให้กว้างขึ้น)

- อัปเดต -

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


1
$หรือเพียงแค่ต้องการให้ทุกคนเริ่มต้นชื่อตัวแปรด้วย มันทำงานได้ใน PHP, JavaScript, และคอมไพเลอร์ C / C ++บางตัว นี่เป็นสิ่งหนึ่งที่ PHP มีสิทธิ์ IMHO
Joey Adams

คำตอบ:


46

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

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

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

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

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


3
ชื่อที่สมเหตุสมผลเป็นเหตุผลทั้งหมดที่คุณต้องการ
JeffO

24

คุณไม่ควรตั้งชื่อ "list", "new", "var", "this" ในตอนแรกเนื่องจากมันไม่ได้อธิบายในภาษาใด ๆ


2
เหมือนกัน "ฟังก์ชั่น" หากไม่ใช่คำหลักก็ไม่ได้หมายความว่าจะเป็น
MPelletier

11

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


7

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


5

คำที่สงวนไว้ส่วนใหญ่ (ในภาษาใด ๆ ) นั้นค่อนข้างทั่วไป ฉันชอบชื่อตัวแปร / ฟังก์ชั่นที่มีความหมายมากกว่าและนั่นหมายความว่าฉันแทบไม่เคยเจอปัญหานี้เลย ฉันควรยอมรับว่าติดเชื้อโดย Charles Simonyi ด้วยแผนการตั้งชื่อดั้งเดิมของเขา - นี่คือ Xerox ในช่วงปลายยุค 70 ก่อนที่มันจะถูกเรียกว่า Hungarian Notation - และนั่นก็หมายความว่าชื่อนั้นเป็นอะไรที่ไม่มีมนุษย์ที่มีสติ จะเคยใช้เป็นคำสงวน


5

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

สถานการณ์หนึ่งที่ฉันคิดได้ว่าปัญหานี้จะเกิดขึ้นเมื่อคุณแชร์โครงสร้างข้อมูลระหว่างภาษาการเขียนโปรแกรม ตัวอย่างเช่นถ้าคุณมีวัตถุ Javascript ที่ฝั่งไคลเอ็นต์ที่แสดงในวัตถุ Python บนฝั่งเซิร์ฟเวอร์และคุณต้องการให้พวกเขามีชื่อเดียวกันสำหรับสมาชิก ในกรณีนั้นกฎง่าย: ห้ามใช้ชื่อที่มีคำที่สงวนไว้ในภาษาใด ๆ แค่นั้นแหละ. เขียนว่าในแนวทางถ้าคุณต้องการ ตอนนี้ไปยังงานที่สำคัญกว่า

BTW ทั้งรายการและ dict เป็นคำสงวนใน Python พวกมันสามารถใช้เป็นชื่อตัวแปรได้


3

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

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


2

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

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


-2

เพียงติดกับ CamelCase ที่เป็นตัวพิมพ์เล็ก มันทำงานได้ทุกที่ สิ่งนี้เรียกว่าการมองหาตัวหารร่วมที่ต่ำที่สุดระหว่างระบบที่เข้ากันไม่ได้และคุณจะพบว่าตัวเองกำลังทำสิ่งนี้อยู่บ่อยครั้ง!


5
ยกเว้นในบางภาษากรณีของตัวอักษรตัวแรกมีนัยสำคัญทางไวยากรณ์
Karl Bielefeldt

1
... และมันละเมิดมาตรฐานเสมือนทางวัฒนธรรมที่ก่อตั้งขึ้นในหลายภาษา
tdammers

สัญกรณ์ฮังการีเป็นที่น่าสับสนยิ่งกว่า CamelCase ... ;-)
Zeke Hansell

@Karl: เห็นได้ชัดว่าข้อเสนอแนะจะถูก จำกัด ขอบเขตของภาษา คุณรู้หรือไม่ว่า Java สามารถเริ่มต้นชื่อตัวแปรด้วยเครื่องหมายดอลลาร์ได้ ฉันเห็นโค้ด Java ที่ดูเหมือน PHP เห็นได้ชัดว่าโปรแกรมเมอร์คนก่อนหน้านี้เรียนรู้การเขียนโปรแกรม!
dotancohen

@dotancohen: ฉันจำได้ว่ากำลังดูโปรแกรมปาสกาลในนิตยสารงานอดิเรกเมื่อหลายปีก่อนเมื่อปาสกาลเพิ่งสร้างฉาก มันชัดเจนมากจากโครงสร้างของโค้ด (และความจริงที่ว่าพวกเขาใช้ตัวแปรทั่วโลกเพื่อส่งผ่านค่าไปยังรูทีนย่อยและฟังก์ชั่น) ว่าโปรแกรมเป็นหนึ่งในโปรแกรมพื้นฐานที่ดีที่สุดที่ฉันเคยเห็น Pascal ;-)
Zeke Hansell
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.