ฟังก์ชัน 'ทางคณิตศาสตร์' ควรเป็นไปตามสัญลักษณ์ทางคณิตศาสตร์หรือไม่


11

ฉันคิดว่าคำถามนี้จะถูกตั้งค่าสถานะเป็นอัตนัยทันที แต่สิ่งใดที่คุณคิดว่าดีกว่า:

double volume(double pressure, double n_moles, double temperature) {
  return n_moles * BOLTZMANN_CONSTANT * temperature / pressure;
}

หรือ

double volume(double P, double n, double T) {
  return n*R*T/P;
}

กล่าวอีกนัยหนึ่งฟังก์ชั่นที่ใช้สมการจะต้องปฏิบัติตามสัญกรณ์ของสมการนั้นหรือควรใช้ชื่อที่ละเอียดยิ่งขึ้น?


3
บางครั้งคุณใช้เวลาคิดเกี่ยวกับวิธีตั้งชื่อตัวแปรมากกว่าที่คุณใช้ในการเขียนโค้ดด้วยตัวเองหรือไม่? ;-)
Tomas

1
ฉันคิดว่าทางเลือกที่สองก็โอเค ฉันจะอธิบายตัวแปรในความคิดเห็นว่า
จอร์โจ

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

ในทางเทคนิคแล้วสิ่งนี้ไม่เกี่ยวข้องกับสัญกรณ์ 'ทางคณิตศาสตร์' และทุกอย่างเกี่ยวกับสิ่งที่นักฟิสิกส์คิด ไม่มีอะไรมากไปกว่าการคิดเลขที่เกิดขึ้นที่นี่
duffymo

2
ฉันเห็นชาวอเมริกันทุกคนผ่านอุณหภูมิในฟาเรนไฮต์ ฉันจะไม่ใช้ double เป็นอุณหภูมิอย่างแน่นอน อาจมีแรงกดดันเช่นกัน ฉันคิดว่าฉันสนใจที่จะทำให้ประเภทมีความปลอดภัยมากกว่าชื่อ
Martin York

คำตอบ:


14

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

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

/* P : Pressure
   V : Volume
   n : Number of moles
   R : Boltzmann constant
   T : Temperature (in K)
*/
double compute_V(double P, double n, double T) {
  return n*R*T/P;
}

5
ประเด็นคืออะไร? ใครบางคนที่ไม่ได้ค้นหาอุณหพลศาสตร์จะไม่ประสบความสำเร็จในการบำรุงรักษาโค้ดไม่ว่าชื่อตัวแปรจะเป็นอะไรก็ตาม
dsimcha

มันดีกว่าไม่รวมข้อมูล แต่ ณ จุดนี้ดูเหมือนว่ามันจะง่ายกว่าถ้าใช้ชื่อเหล่านั้นในฟังก์ชัน ฉันไม่เห็นประโยชน์มากมายในการใช้ตัวอักษร ...
Patrick87

@dsmicha: ใช่PV = nRTเป็นตัวอย่างพื้นฐานมาก ในโลกแห่งความเป็นจริงมีฟังก์ชั่นที่ซับซ้อนมากขึ้นซึ่งไม่เป็นที่รู้จักและมักจะมีความยาวและซับซ้อน ดังนั้นแม้ว่าบุคคลนั้นจะได้รับการฝึกฝนในสาขา แต่ก็มีโอกาสที่ดีที่เขา / เธอจะได้พบกับฟังก์ชั่นที่เป็นมนุษย์ต่างดาวโดยสิ้นเชิง

4
@ Patrick87: ฉันชอบตัวอักษรเพราะฉันสามารถตรวจสอบความจริงของการแสดงออกได้อย่างรวดเร็วโดยดูจากกระดาษ (หรือจากหน่วยความจำ) เนื่องจากมันใกล้กว่าแบบฟอร์มดั้งเดิมมาก

2
+1 นี่เป็นวิธีที่ดีที่สุดที่จะทำ แม้แต่สมการทางฟิสิกส์ขั้นต้นที่ค่อนข้างธรรมดาก็อาจใช้ตัวอักษรกรีก, ราก, อนุพันธ์บางส่วน, ตัวดำเนินการ (Laplace, Hamilton), เวกเตอร์, เทนเซอร์, และอื่น ๆ ดังนั้นโดยทั่วไปแล้วมันเป็นไปไม่ได้ที่จะเป็นตัวแทนของสมการ เกาะเป็นมาตรฐานตามที่เป็นไปได้ชื่อตัวแปร / ตัวย่อ (เช่นGAS_CONSTANTเป็นไม่ได้ชื่อตัวแปรมาตรฐานทุกตำราฉันรู้ของการใช้งานRสำหรับที่) และอธิบายสั้น ๆ พวกเขาในการแสดงความคิดเห็นเป็นสิ่งที่ดีที่สุดที่สามารถทำได้
Joonas Pulakka

7

เพียงแค่โยนออกไปที่นั่นคุณมีตัวเลือกอื่น:

Volume ComputeVolume(Pressure p, Moles m, Temperature t) { ... }

สิ่งนี้ค่อนข้างคล้ายกับสิ่งที่ F # ทำกับหน่วยวัดและมีประโยชน์ในการหลีกเลี่ยงปัญหาเช่นการแทนที่แรงดันโดยอุณหภูมิโดยไม่ตั้งใจ เป็นการยากที่จะแยกแยะว่าการโต้เถียงควรจะทำยังไงเมื่อมีลายเซ็น (Double, Double, Double)


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

ใช่ F # ทำได้ด้วยหน่วยการวัด msdn.microsoft.com/en-us/library/dd233243.aspx
งัด

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

สิ่งนี้สามารถทำได้อย่างสมบูรณ์ด้วยเทมเพลต C ++
วินไคลน์

@lindelof: คุณสามารถใช้ฟังก์ชันนี้ได้ด้วย C ++typedef
Jacob

7

ฉันชอบสิ่งนี้:

/* This function calculates volume using the following formula:
 *
 *     n * R * T
 * v = ---------
 *         P
 */
double volume(double pressure, double n_moles, double temperature) {
    return n_moles * BOLTZMANN_CONSTANT * temperature / pressure;
}

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


2
นอกจากนี้จะดีในความคิดเห็นที่จะรวมลิงค์ไปยังบางแห่งในอินเทอร์เน็ตที่พูดถึงสูตร (เช่น: en.wikipedia.org/wiki/Ideal_gas_law )
Chris Shaffer

นี่เป็นวิธีที่ดีมาก แต่ยุ่งเล็กน้อย ฉันอาจต้องการเห็นลิงก์ไปยังเช่น Wikipedia ที่อธิบาย (ในกรณีนี้) กฎหมายแก๊สอุดมคติ
Patrick87

3

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

OTHO ฉันจะบอกว่าฉันต้องการสัญกรณ์คณิตศาสตร์แบบดั้งเดิมมีความละเอียดและอธิบายมากกว่าเดิมในบางครั้ง แต่ไม่ว่าฉันจะคิดว่ารหัสทางคณิตศาสตร์ควรติดอยู่กับหลักการทางคณิตศาสตร์

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


2

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


2

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

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

  • สำหรับภาษาอื่นที่สนับสนุนการวิเคราะห์มิติสามารถดำเนินการได้เช่นใน C ++ พร้อมเทมเพลตห้องสมุด Boost Units ใช้วิธีการนี้ที่ฉันเชื่อ

1

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


1

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


คุณจะรักสิ่งนี้ ...

0

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

หากคุณกลับมาที่:

n*R*T/P;

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

n_moles * BOLTZMANN_CONSTANT * temperature / pressure;

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


คุณคิดว่า energy_in_joules = mass_in_kilograms * pow (speed_of_light_in_vacumm_in_metres-per_second, 2) นั้นง่ายกว่า E = mc ^ 2
Martin Beckett

@Martin Beckett คุณอ่านสิ่งที่ฉันโพสต์จริงหรือไม่? "โดยทั่วไปแล้วสำหรับรูปแบบขั้นสูงฉันจะไม่จำสิ่งที่แต่ละส่วนเป็นเว้นแต่ฉันใช้มันอย่างแข็งขัน" ฉันไม่ได้บอกว่าฉันจะลืมสมการที่มีการจัดการเพื่อผลักดันตัวเองเป็นความรู้สาธารณะ ในกรณีเช่นE=m*(c^2)ฉันจะเข้าใจในหกเดือน
zzzzBov

สำหรับสมการคลาสสิกที่รู้จักกันดีจะใช้สัญลักษณ์ปกติเพื่อให้ผู้คนสามารถมองเห็นมัน แม้ในขอบเขตของการตั้งชื่อตัวแปร theta หรือ phi ถ้านั่นคือสิ่งที่ใช้ในโดเมน
Martin Beckett

-1

โยนเหรียญ

บางครั้งคุณใช้เวลาคิดเกี่ยวกับวิธีตั้งชื่อตัวแปรมากกว่าที่คุณใช้ในการเขียนโค้ดด้วยตัวเองหรือไม่?


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