หมายเลขมายากลทั้งหมดถูกสร้างขึ้นเหมือนกันหรือไม่?


77

ในโครงการที่ผ่านมาผมจำเป็นต้องมีการแปลงจากไบต์กิโลไบต์ กิบิไบต์ รหัสตรงไปตรงมามากพอ:

var kBval = byteVal / 1024;

หลังจากเขียนสิ่งนั้นฉันได้ฟังก์ชั่นที่เหลือและทำงานต่อไป

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

ดังนั้นตัวเลขที่เป็นค่าคงที่ที่รู้จักกันดีจริง ๆ ทั้งหมดนั้นวิเศษหรือไม่?


คำถามที่เกี่ยวข้อง:

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

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


17
จริง ๆ แล้วฉันทำงานในโครงการที่พวกเขาสร้างค่าคงที่เช่น, FOUR_HUNDRED_FOUR = 404. ฉันทำงานในโครงการอื่นที่พวกเขามีความเข้มแข็งเกี่ยวกับการใช้สตริงคงที่แทนที่จะเป็นตัวอักษรดังนั้นพวกเขาจึงมีหลายสิบบรรทัดในรหัสที่ดูเหมือนว่าDATABASE = "database"
Rob

82
ใช้อย่างแน่นอน1024เพราะมิฉะนั้นทีม dev ของคุณจะใช้เวลาทั้งหมดในการพิจารณาว่ามันคือ "กิโลไบต์" หรือ "kibibytes"
Steven Burnap

6
คุณอาจพิจารณาว่า 1024 เป็น kibi และ#define KIBI1024 MEBIเป็น 1024 * 1024 …
ysdx

6
@ Rob Y: ฟังดูเหมือนโปรแกรมเมอร์เก่าแก่ของ Fortran เพราะภาษาการเขียนโปรแกรมนั้นบังคับให้โปรแกรมเมอร์ทำเช่นนั้น ใช่แล้วคุณจะเห็นค่าคงที่เช่นZERO=0, ONE=1, TWO=2และเมื่อโปรแกรมถูกย้ายไปยังภาษาอื่น (หรือโปรแกรมเมอร์ไม่เปลี่ยนพฤติกรรมเมื่อเปลี่ยนภาษาของพวกเขา) คุณจะเห็นมันอยู่ที่นั่นด้วยและคุณต้องอธิษฐานว่าไม่มีใครเปลี่ยนเป็นONE=2...
Holger

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

คำตอบ:


103

ไม่ใช่ตัวเลขเวทย์มนตร์ที่เหมือนกันทั้งหมด

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

การซ่อน 1024 ด้านหลัง BYTES_PER_KBYTE หมายความว่าคุณจะไม่เห็นในทันทีว่าถูกต้องหรือไม่

ฉันคาดหวังให้ทุกคนรู้ได้ทันทีว่าทำไมค่าถึง 1024 ในทางกลับกันถ้าคุณแปลงไบต์เป็นเมกะไบต์ฉันจะกำหนดค่าคงที่ BYTES_PER_MBYTE หรือค่าคงที่ที่คล้ายกันเพราะค่าคงที่ 1,048,576 นั้นไม่ชัดเจนจน 1024 ^ 2 หรือ ว่ามันถูกต้อง

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

// Value must be less than 3.5 volts according to spec blah.
SomeTest = DataSample < 3.50

ฉันหาดีกว่า

SomeTest = DataSample < SOME_THRESHOLD_VALUE

เมื่อSOME_THRESHOLD_VALUEมีการใช้งานในหลาย ๆ ที่การแลกเปลี่ยนจะคุ้มค่าที่จะกำหนดค่าคงที่ในความคิดของฉัน


67
"ปัญหากับหมายเลขมายากลคือเมื่อพวกเขาจะวิเศษ" - นี่คือเช่นคำอธิบายที่ยอดเยี่ยมของแนวคิดที่! ฉันกำลังซีเรียส! +1 สำหรับประโยคนั้นเพียงอย่างเดียว
Jörg W Mittag

20
นี่คือสิ่งที่ฉันเพิ่งได้รับ: "ไม่ใช่ตัวเลขที่เป็นปัญหา แต่เป็นเวทมนตร์"
Jörg W Mittag

10
1024 ชัดเจนกับใคร นั่นไม่ใช่เหตุผลสำหรับหมายเลขมายากลทุกตัวใช่หรือไม่ ตัวเลขเวทย์มนตร์ทั้งหมดถูกนำมาใช้เพราะเห็นได้ชัดว่าใครเขียนไว้ ไม่ใช่ 9.8 ชัดเจนเช่นกัน? สำหรับฉันมันค่อนข้างชัดเจนว่ามันคือการเร่งความเร็วของแรงโน้มถ่วงบนโลก แต่ฉันจะสร้างค่าคงที่อย่างไรก็ตามเพราะสิ่งที่ชัดเจนสำหรับฉันอาจไม่ชัดเจนสำหรับคนอื่น
Tulains Córdova

15
ไม่ความคิดเห็นเช่นเดียวกับในตัวอย่าง "ดีกว่า" ของคุณคือธงสีแดงขนาดใหญ่ เป็นรหัสที่ไม่ได้ผ่านการทดสอบการอ่านของผู้ที่เขียนในเวลานั้น ฉันจะยกตัวอย่าง e^i*pi = -1อยู่ไกลอย่างชัดเจนมากขึ้น (ดีกว่า) 2.718^i*3.142 = -1กว่า ตัวแปรมีความสำคัญและไม่ใช่สำหรับรหัสทั่วไปเท่านั้น รหัสถูกเขียนขึ้นสำหรับการอ่านก่อนรวบรวมที่สอง นอกจากนี้รายละเอียดการเปลี่ยนแปลง (มาก) ในขณะที่ 1024 อาจไม่ควรอยู่ในการกำหนดค่า 3.5 เสียงเหมือนที่ควรจะเป็น
นาธานคูเปอร์

51
ฉันจะไม่ใช้ค่าคงที่สำหรับ 1024 ^ 2 เช่นกัน 1024*1024plz!
Lightness Races ใน Orbit

44

มีคำถามสองข้อที่ฉันถามเมื่อพูดถึงเรื่องเวทย์มนตร์

หมายเลขมีชื่อหรือไม่?

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

เห็นได้ชัดว่าค่าคงที่เช่น pi, e, et al มีชื่อที่มีความหมาย ค่าเช่น 1024 อาจเป็นได้BYTES_PER_KBแต่ฉันก็คาดหวังด้วยว่าผู้พัฒนารายใดจะรู้ว่า 1024 หมายความว่าอย่างไร ผู้ชมเป้าหมายสำหรับซอร์สโค้ดคือโปรแกรมเมอร์มืออาชีพที่ควรมีพื้นฐานในการรู้ถึงพลังที่แตกต่างกันของทั้งสองและทำไมจึงถูกใช้

มันถูกใช้ในหลาย ๆ ที่หรือไม่?

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

คำถามของคุณ

ในกรณีที่มีคำถามของคุณฉันจะใช้หมายเลขตามที่เป็น

ชื่อ: มีชื่อสำหรับหมายเลขนั้น แต่ไม่มีประโยชน์ใด ๆ มันไม่ได้แสดงค่าคงที่ทางคณิตศาสตร์หรือค่าที่ระบุในเอกสารข้อกำหนดใด ๆ

สถานที่ตั้ง: แม้ว่าจะใช้ในหลาย ๆ ที่ ๆ มันจะไม่เปลี่ยนแปลงโดยไม่คำนึงถึงผลประโยชน์นี้


1
เหตุผลในการใช้ค่าคงที่แทนที่จะเป็นตัวเลขเวทย์นั้นไม่เพียงเพราะตัวเลขดังกล่าวจะเปลี่ยนไป แต่ยังรวมถึงการอ่านและจัดทำเอกสารด้วยตนเอง
Tulains Córdova

4
@ user61852: ค่าคงที่ที่ตั้งชื่อไม่สามารถอ่านได้เสมอ พวกเขามักจะเป็น แต่ไม่เสมอไป
whatsisname

2
โดยส่วนตัวแล้วฉันใช้คำถามสองข้อนี้แทน: "คุณค่านี้จะเปลี่ยนไปตลอดชีวิตของโปรแกรมหรือไม่" และ "นักพัฒนาที่ฉันคาดหวังว่าจะทำงานกับซอฟต์แวร์นี้จะเข้าใจว่าหมายเลขนี้มีไว้เพื่ออะไร"
Steven Burnap

4
คุณหมายถึงปัญหา Y2K หรือไม่ ฉันไม่แน่ใจว่าเกี่ยวข้องกับที่นี่ ใช่มีรหัสจำนวนมากเช่น 'date - 1900' แต่ในรหัสนั้นปัญหาไม่ใช่เลขเวทย์มนตร์ "1900"
Steven Burnap

1
คำตอบนี้อาจได้รับประโยชน์จากการกล่าวถึงว่าตัวเลข "ชัดเจน" ซึ่งเป็น 1024 อย่างแน่นอนนั้นเป็นตัวเลขที่ผู้พัฒนารายอื่นมีแนวโน้มที่จะเขียนเป็นตัวเลขอย่างเป็นธรรมชาติแม้เมื่อมีคนกำหนดค่าคงที่ที่มีชื่อสำหรับพวกเขา ฉันคนหนึ่งมักจะไม่คิดว่าการค้นหารหัสแหล่งที่มาสำหรับค่าคงที่ที่มีอยู่สำหรับ 1024 ถ้าฉันไม่ได้รู้ว่ามีหนึ่งถ้าฉันต้องใช้ 1024 ในการแปลงจำนวนไบต์
ไฮด์

27

คำพูดนี้

ไม่ใช่ตัวเลขที่เป็นปัญหา แต่เป็นเวทมนตร์

ตามที่กล่าวโดยJörg W Mittagตอบคำถามนี้ค่อนข้างดี

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

ดังนั้นจึง1024ไม่น่าอัศจรรย์เพราะบริบททำให้ชัดเจนว่าเป็นค่าที่เหมาะสมและคงที่ที่จะใช้สำหรับการแปลง

เช่นเดียวกันตัวอย่างของ:

var numDays = numHours / 24; 

มีความชัดเจนไม่แพ้กันเพราะรู้กันดีว่ามี 24 ชั่วโมงในแต่ละวัน


21
แต่ ... แต่ ... 24 สามารถเปลี่ยนแปลงได้! โลกหมุนรอบตัวเองช้าและในที่สุดจะมี 25 ชั่วโมง! (แน่นอนว่าเราทุกคนจะต้องตายไปแล้วทำให้การบำรุงรักษาซอฟต์แวร์นั้นเป็นปัญหาของคนอื่น)

14
จะเกิดอะไรขึ้นหลังจากติดตั้งซอฟต์แวร์บนดาวอังคาร คุณควรจะฉีดค่าคงที่นั้น ...
durron597

8
@ durron597: ถ้าโปรแกรมของคุณรันนานพอที่โลกจะชะลอตัวในช่วงเวลานั้น คุณไม่ควรได้รับการฉีดอย่างต่อเนื่องมากกว่าฟังก์ชั่นที่ยอมรับประทับเวลา (เริ่มต้นตอนนี้) และผลตอบแทนจำนวนชั่วโมงในวันที่ประทับเวลาที่ตก ;-)
สตีฟเจสซอพ

13
คุณจะต้องเรียนรู้ YAGNI
whatsisname

3
@ durron597 ไม่มีอะไรพิเศษเกิดขึ้นเมื่อการจับเวลาของซอฟแวร์จะใช้งานบนดาวอังคารเพราะโดยการประชุมดาวอังคารวัน 24 ชั่วโมงนาน แต่ทุกชั่วโมงคือ 2.7% อีกต่อไปมากกว่าที่เป็นอยู่บนโลก แน่นอนว่าทั้งวัน sidereal โลกและวันสุริยคติของโลกนั้นไม่เกิน 24 ชั่วโมง (ตัวเลขที่แน่นอนอยู่ในหน้าเดียวกันนั้น) ดังนั้นคุณจึงไม่สามารถใช้24 ต่อไป! เหมือนที่ Izkata พูดไว้ บางทีคุณอาจจะโชคดีกว่านี้ในการใช้ค่าคงที่24บนดาวอังคารมากกว่าบนโลก!
CVn

16

ผู้โพสต์คนอื่นพูดถึงการแปลงที่เกิดขึ้นคือ 'ชัดเจน' แต่ฉันไม่เห็นด้วย คำถามเดิม ณ เวลานี้รวมถึง:

กิโลไบต์ kibibytes

ดังนั้นฉันรู้แล้วว่าผู้เขียนเป็นหรือสับสน หน้า Wikipedia จะเพิ่มความสับสน:

1000 = KB kilobyte (metric)
1024 = kB kilobyte (JEDEC)
1024 = KiB kibibyte (IEC)

ดังนั้น "Kilobyte" สามารถใช้เพื่อหมายถึงทั้งปัจจัยของ 1,000 และ 1024 โดยมีความแตกต่างเพียงอย่างเดียวในการจดชวเลขและเป็นตัวพิมพ์ใหญ่ของ 'k' ยิ่งไปกว่านั้น 1024 สามารถหมายถึงกิโลไบต์ (JEDEC) หรือ kibibyte (IEC) ทำไมไม่ทำลายความสับสนทั้งหมดนั้นด้วยค่าคงที่ด้วยชื่อที่มีความหมาย BTW, เธรดนี้ใช้ "BYTES_PER_KBYTE" บ่อยครั้งและนั่นก็ไม่ชัดเจนน้อยกว่า KBYTE: มันคือ KIBIBYTE หรือ KILOBYTE ฉันชอบที่จะไม่สนใจ JEDEC และมีและBYTES_PER_KILOBYTE = 1000 BYTES_PER_KIBIBYTE = 1024ไม่มีความสับสนอีกต่อไป

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

ถ้าฉันเห็น:

int BYTES_PER_KIBIBYTE = 1024;  
...  
var kibibytes = bytes / BYTES_PER_KIBIBYTE;  

จากนั้นจะเห็นได้ชัดทันทีว่าผู้เขียนตั้งใจทำอะไรและไม่มีความคลุมเครือ ฉันสามารถตรวจสอบค่าคงที่ได้ในเวลาไม่กี่วินาที (แม้ว่าจะอยู่ในไฟล์อื่น) ดังนั้นแม้ว่ามันจะไม่ 'ทันที' แต่ก็ใกล้พอที่จะส่งทันที

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


2
คำตอบที่ดี มันจะแข็งแกร่งขึ้นถ้าคุณคำนึงถึงวัฒนธรรมของแต่ละทีม หากคุณเชื่อว่าโปรไฟล์ SE ของฉันฉันแก่พอที่จะประเมินมาตรฐานเหล่านั้นมาก่อน ดังนั้นความสับสนเพียงอย่างเดียวมาจาก "สิ่งที่เป็นคำมาตรฐานปัจจุบัน (ไม่ใช่ -)?" และคุณน่าจะปลอดภัยถ้าสมมติว่าฉันทำงานกับทีมเพื่อนไดโนเสาร์ที่ทุกคนมีปัญหาคำศัพท์เดียวกัน (ไม่ใช่ -)

@ GlenH7: IMHO หน่วยเก็บพลังงานที่ใช้ควรเก็บไว้ในหน่วยความจำเนื่องจากมันถูกจัดสรรในชิ้นส่วนขนาดกำลังสอง ขนาดการจัดสรรขั้นต่ำคือ 4096 ไบต์มันเหมาะสมกว่าหรือไม่ที่จะมีหน่วยสำหรับปริมาณของหน่วยความจำที่ต้องใช้ในการเก็บไฟล์ขนาดเล็กที่สุด 256 ไฟล์หรือจำนวนหน่วยความจำที่จำเป็นสำหรับเก็บไฟล์ 244.140625 โดยส่วนตัวแล้วฉันดูความแตกต่างระหว่างเมกะไบต์ฮาร์ดไดรฟ์ - ผู้ผลิตและเมกะไบต์อื่น ๆ ที่คล้ายคลึงกับความแตกต่างระหว่างโทรทัศน์ในแนวทแยงและนิ้วเส้นทแยงมุมจริง
supercat

@Ryan: สำหรับกรณีเฉพาะนี้ฉันอยากทำสงครามกับหน่วยมาตรฐาน - KB คือ 1,000 ไบต์หรือรหัสผิดและ 1024 ไบต์เป็น KiB หรือรหัสผิด นี่เป็นวิธีเดียวที่เราจะผ่านพ้นปัญหา "หน่วยที่คลุมเครือ" ไปได้ คนต่างกันที่นิยาม "ค่าคงที่เวทย์มนตร์" (เช่นKB) แตกต่างกันจะไม่ช่วย
เบรนแดน

11

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

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

อันตรายที่สำคัญกับบางสิ่งบางอย่างเช่น#define BYTES_PER_KBYTE 1024มันอาจแนะนำให้คนที่พบprintf("File size is %1.1fkB",size*(1.0/BYTES_PER_KBYTE));ว่าวิธีที่ปลอดภัยเพื่อให้รหัสใช้พันไบต์จะเปลี่ยน#defineคำสั่ง การเปลี่ยนแปลงดังกล่าวอาจทำให้เกิดความหายนะได้อย่างไรก็ตามหากเช่นโค้ดที่ไม่เกี่ยวข้องอื่น ๆ บางอย่างได้รับขนาดของวัตถุใน Kbytes และใช้ค่าคงที่นั้นเมื่อทำการจัดสรรบัฟเฟอร์สำหรับมัน

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


7

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

1024 ยังเป็นจำนวน KiB ต่อ MiB สมมติว่าเราใช้ 1024 เพื่อเป็นตัวแทนของการคำนวณนั้นหรือในหลาย ๆ ที่และตอนนี้เราต้องเปลี่ยนเป็นคำนวณ GiB แทน การเปลี่ยนค่าคงที่นั้นง่ายกว่าการค้นหา / แทนที่ทั่วโลกซึ่งคุณอาจเปลี่ยนค่าผิดในบางสถานที่โดยไม่ตั้งใจหรือพลาดในที่อื่น

หรืออาจเป็นหน้ากากที่แนะนำโดยโปรแกรมเมอร์ที่ขี้เกียจซึ่งจำเป็นต้องได้รับการอัปเดตหนึ่งวัน

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

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

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