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


18

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

<script src="client_scripts/app/player_stats/generator.js"></script>
<script src="client_scripts/app/coach_settings/generator.js"></script>

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

อีกทางหนึ่งด้วยค่าใช้จ่ายของชื่อสั้นฉันสามารถใช้:

<script src="client_scripts/app/player_stats/player_stats_generator.js"></script>
<script src="client_scripts/app/coach_settings/coach_settings_generator.js"></script>

7
ชื่ออีกต่อไป! :)
marko

2
statsgen.js,settingsgen.js
Kroltan

1
แห้ง! (เช่นชื่อที่สั้นกว่า)
พอลเดรเปอร์

1
ทำความสะอาดรหัส (เช่นความหมายอีกต่อไปชื่อ)
Songo

คำตอบ:


36

พิจารณาอัตราส่วนต้นทุน / ผลประโยชน์ของสองตัวเลือกของคุณ:

  1. การใช้ชื่อเดิมซ้ำจะทำให้เกิดความสับสนหรือตั้งชื่อความขัดแย้งหรือไม่ อาจไม่ได้เนื่องจากอยู่ในโฟลเดอร์ที่แตกต่างกัน ชื่อ "player_stats / generator.js" เทียบเท่ากับ "player_stats_generator.js" อย่างไรก็ตามหากคุณเห็นว่าในอนาคตมีเหตุผลที่จะรวมไฟล์ js ของคุณไว้ในไดเรกทอรีเดียว (การปรับใช้หรือไม่ฉันไม่ทราบ) นี่ควรเป็นตัวบ่งชี้ที่ดีที่จะให้ชื่อเฉพาะ

  2. การใช้ชื่อที่ยาวขึ้นจะเกี่ยวข้องกับการพิมพ์จากภายนอกหรือไม่? อาจจะไม่. ไม่เพียงทำชื่อไฟล์การเติมข้อความอัตโนมัติ JS IDEs จำนวนมากในโครงการให้กับคุณ แต่ยังเป็นส่วนหนึ่งของรหัสที่อาจเขียนได้ไม่เกินหนึ่งครั้งต่อไฟล์ รหัสที่พิมพ์บ่อยมากคือคลาสและฟังก์ชันภายในไฟล์ js และสิ่งเหล่านั้น (หวังว่า) จะไม่ขัดแย้งกัน

  3. เมื่อทำการดีบักข้อมูลประเภทใดที่คุณได้รับเกี่ยวกับข้อผิดพลาด หากรายงานข้อผิดพลาดที่พบบ่อยที่สุดคือ "ข้อผิดพลาดในบรรทัดที่ 34 <filename.js>" ให้พิจารณาตั้งชื่อเฉพาะให้พวกเขาเนื่องจากได้รับข้อผิดพลาดในเครื่องกำเนิดไฟฟ้าเพียงแค่จากนั้นพยายามที่จะทำนายผ่านบริบทซึ่งกำเนิดอาจเป็นเรื่องยุ่งยาก


5
การดีบัก js มักจะพิมพ์พา ธ ไฟล์ทั้งหมด
Bergi

1
@Bergi ขึ้นอยู่กับเบราว์เซอร์ (และรุ่น), IDE (ถ้ามี), กรอบการบันทึกข้อผิดพลาดและอื่น ๆ
Avner Shahar-Kashtan

22

เช่นเดียวกับในทางปฏิบัติหาก IDE ของคุณแสดงชื่อไฟล์ในแท็บหากคุณใช้ชื่อเดียวกันสำหรับแต่ละไฟล์คุณจะพบกับแท็บที่แสดงชื่อเดียวกันทั้งหมด นั่นอาจเป็นเรื่องที่น่ารำคาญมาก โครงการหนึ่งที่ฉันเข้ารับการบำรุงรักษามีปัญหานั้นและมันเป็นความเจ็บปวดครั้งใหญ่ที่เปิดแท็บได้ 15 แท็บครึ่งหนึ่งของชื่อไฟล์เดียวกัน

ดังนั้น ... ใช้ชื่อที่สื่อความหมายมากกว่านี้


1
โปรแกรมแก้ไขข้อความที่ทันสมัยส่วนใหญ่จะแสดงเส้นทางในแท็บหากไฟล์มีชื่อเหมือนกัน
kmiyashiro

แน่นอนว่าบางครั้งมันจำเป็นสำหรับไฟล์หลายไฟล์ที่จะมีชื่อเดียวกัน [เช่นบนเซิร์ฟเวอร์จำนวนมากindex.html] ฉันพบว่าตัวเองรำคาญกับโปรแกรมที่ทำให้ยากต่อการกำหนดพา ธ ที่เกี่ยวข้องกับไฟล์เฉพาะ
supercat

1
@kmiyashiro - อาจเป็นเช่นนั้น แต่ถ้าคุณเปิดไฟล์จำนวนมากแท็บอาจลดขนาด (ความกว้าง) จนถึงจุดที่คุณเห็นชื่อไฟล์เป็นส่วนใหญ่เท่านั้น จากนั้นคุณต้องวางเม้าส์ของคุณเหนือแต่ละแท็บและรอให้ "คำแนะนำเครื่องมือ" แสดงเส้นทาง / ไฟล์แบบเต็ม หากคุณเปิดไฟล์เพียงไม่กี่ไฟล์และมีเพียงชื่อที่ซ้ำกันซึ่งพบได้ยากก็อาจเป็นที่ยอมรับได้ แต่ด้วยไฟล์จำนวนมากมันน่ารำคาญมาก
Kevin Fegan

1
หากคุณมีแท็บจำนวนมากที่เปิดด้วยชื่อเดียวกันทั้งหมดฉันจะสลับไปยังไฟล์โดยใช้คำสั่งคีย์แทนที่จะพยายามค้นหามันท่ามกลางแท็บต่างๆแม้จะมีชื่อที่ไม่ซ้ำกัน
kmiyashiro

1
การใช้ชื่อที่มีความหมายมากกว่านั้นอาจสร้างความรำคาญsome_super_long_descriptor_that_needs_more_description.jsให้กับคุณได้ ... เมื่อคุณตั้งชื่อให้แตกต่างจากsome_super_long_descriptor_that_needs_more_cowbell.js
corsiKa

12

มีปัจจัยการตัดสินใจที่ชัดเจนที่นี่: DRY (อย่าทำซ้ำตัวเอง)

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

หากคำอธิบายที่ดีที่สุดของไฟล์จาวาสคริปต์ในบริบทของclient_scripts > app > player_statsมันคือเส้นทางของมันควรจะเป็นgeneratorclient_scripts/app/player_stats/generator.js

คำถามนี้เป็นคำถามที่programmers.stackexchange.com/questions/ 250481 นอกจากนี้ยังมีserverfault.com/questions/ 250481 250481เป็นสิ่งหนึ่งในบริบทของคำถามของโปรแกรมเมอร์และอย่างอื่นในบริบทของคำถาม Server Fault

เส้นทาง (หรือ URL) นั้นดีเพราะเป็นตัวระบุที่ซ้อนกัน มาใช้มันกันเถอะ :)


7

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

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

หนังสือClean CodeและCode Complete มีรายละเอียดมากพอ ๆ กับ whys และที่ ๆ การตั้งชื่อที่ดี แต่มันไม่ได้เป็นแหล่งเดียว


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

3

ขึ้นอยู่กับเทคโนโลยีที่คุณใช้งาน ชื่อควรระบุรายการและเส้นทางควรระบุบริบท ฉันยอมรับการตั้งชื่อที่ดีเป็นสิ่งสำคัญ แต่เฮ้เส้นทางเป็นชื่อด้วย แต่จากมุมมองของภาคปฏิบัติหากคุณกำลังใช้บางอย่างเช่นจาวาสคริปต์คงเป็นเรื่องที่ดีกว่าถ้าจะเก็บชื่อที่แม่นยำสำหรับรายการสุดท้าย หากคุณกำลังทำงานกับเครื่องมือที่คำนึงถึงเรื่องนี้เช่นPythonวิธีที่แนะนำคือการใช้ชื่อเดียวกันกับพา ธ อื่น (โมดูลเนมสเปซ) ถ้าคุณดูที่Javaคุณจะได้พบกับชั้นเรียนที่มีชื่อเดียวกันและแพ็คเกจอื่น เราสามารถก้าวไปอีกขั้นและพูดว่าวิธีการนั้นมีชื่อว่าการกระทำในบริบทของคลาสและเรามีวิธีการตั้งชื่อเหมือนกันในชั้นเรียนที่แตกต่างกันซึ่งตัวเองสามารถตั้งชื่อเดียวกัน แต่วางไว้ในแพ็คเกจที่แตกต่างกัน The Zen of Pythonพูดว่า:

Namespaces เป็นหนึ่งในแนวคิดที่ยอดเยี่ยม - ลองทำสิ่งเหล่านี้ให้มากขึ้น!

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

    var playerStatsGenerator = player_stats.Generator();
    var coachSettingsGenerator = coach_settings.Generator();

คุณสามารถมีเค้กของคุณและกินมันด้วย

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