क्या 'गणितीय' कार्यों को गणितीय संकेतन का पालन करना चाहिए?


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
क्या आप भी कभी-कभी यह सोचने में अधिक समय व्यतीत करते हैं कि एक चर का नाम कैसे रखा जाए, जो आप स्वयं कोडिंग पर खर्च करते हैं? ;-)
टॉमस

1
मुझे लगता है कि दूसरा विकल्प ठीक है। मैं एक टिप्पणी में हालांकि चर समझाना होगा।
जियोर्जियो

ऐसा लग रहा है कि किसी ने सभी को जवाब देने और नीचे जाने के लिए फिट देखा। क्या यह व्यक्ति ऐसा करने के लिए अपने कारण साझा करने की परवाह करेगा? जवाब मुझे पूरी तरह से उचित लगे।

तकनीकी रूप से, इसका 'गणितीय' संकेतन से कोई लेना-देना नहीं है और भौतिक विज्ञानी क्या सोचते हैं, इसके बारे में सब कुछ करना होगा। यहां अंकगणित के अलावा और कुछ नहीं है।
duffymo

2
मैं सभी अमेरिकियों को फारेनहाइट में तापमान पार करते देख सकता हूं। मैं निश्चित रूप से तापमान के लिए डबल का उपयोग नहीं कर रहा हूं। शायद दबाव के लिए भी वही जाता है। मुझे लगता है कि मैं नामों की तुलना में प्रकारों को सुरक्षित रखने में अधिक रुचि रखूंगा।
मार्टिन यॉर्क

जवाबों:


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

यह निश्चित रूप से जानकारी को शामिल नहीं करने से बेहतर है, लेकिन इस बिंदु पर, ऐसा लगता है कि फ़ंक्शन में केवल उन नामों का उपयोग करना आसान होगा। मैं अक्षरों का उपयोग करने में बहुत अधिक उपयोगिता नहीं देख रहा हूं ...
पैट्रिक87

@dsmicha: हाँ, PV = nRT एक बहुत ही बुनियादी उदाहरण है। वास्तविक दुनिया में, अधिक जटिल कार्य मौजूद हैं जो आमतौर पर ज्ञात नहीं हैं और लंबे और जटिल होते हैं। तो भले ही व्यक्ति को क्षेत्र में प्रशिक्षित किया गया हो, वहाँ एक अच्छा मौका है / वह एक समारोह में आएगा जो पूरी तरह से विदेशी है।

4
@ पैट्रिक87: मैं अक्षरों को पसंद करता हूं क्योंकि मैं मूल रूप से बहुत करीब होने के बाद से (या स्मृति से) कागज को देखकर अभिव्यक्ति की सत्यता की जांच कर सकता हूं।

2
+1। यह इसे करने का सबसे अच्छा तरीका है। यहां तक ​​कि काफी प्राथमिक भौतिकी समीकरणों में ग्रीक अक्षर, मूल, आंशिक व्युत्पन्न, ऑपरेटर (लाप्लास, हैमिल्टन), वैक्टर, टेंसर्स आदि का उपयोग हो सकता है, ताकि आम तौर पर टिप्पणियों में कानूनी रूप से समीकरण का प्रतिनिधित्व करना संभव न हो। के रूप में मानक के रूप में संभव चर नाम / संक्षिप्त रूपों के लिए चिपके हुए (जैसे GAS_CONSTANTहै नहीं एक मानक चर नाम, हर पाठ्यपुस्तक मैं का उपयोग करता है के बारे में पता Rहै कि के लिए) और टिप्पणियों में उन्हें संक्षेप में समझा सबसे अच्छी बात यह है कि क्या किया जा सकता है।
जूनस पुलका

7

बस इसे वहाँ से बाहर फेंकने पर, आपके पास एक और विकल्प है:

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

यह एफ # माप की इकाइयों के साथ क्या करता है, के समान है, और अनजाने में तापमान द्वारा दबाव की जगह जैसे मुद्दों से बचने का लाभ है। यह देखना मुश्किल है कि जब हस्ताक्षर हो (डबल, डबल, डबल) तो क्या तर्क देना चाहिए


बस स्पष्ट करने के लिए, क्या वहाँ भाषाएँ ऐसी हैं जो इस तरह के आयामी विश्लेषण कर सकती हैं? Ie को पता है कि उदाहरण के लिए कि दबाव और आयतन के बीच के उत्पाद को ऊर्जा की एक इकाई को सौंपा जा सकता है?
लिंडेलोफ

हां, एफ # माप की इकाइयों के साथ ऐसा करता है। msdn.microsoft.com/en-us/library/dd233243.aspx
मैथियास

इकाइयों के बीच स्वचालित रूपांतरण के समर्थन के बिना भी, कुछ इकाइयों के लिए समर्पित प्रकारों को परिभाषित करना फायदेमंद हो सकता है, जैसे मनी क्लास। यह अनजाने चर असाइनमेंट और रूपांतरण गलतियों को सीमित करता है, और रीफ़ैक्टरिंग में मदद करता है।
मथियास

यह C ++ टेम्प्लेट के साथ बहुत मजबूती से किया जा सकता है।
केविन क्लाइन

@ लिंडेलोफ: आप इस कार्यशीलता को C ++typedef
जैकब

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 )।
क्रिस शफ़र

यह एक बहुत अच्छा दृष्टिकोण है, लेकिन थोड़ा गड़बड़ है। मैं उदाहरण के लिए उदाहरण के लिए विकिपीडिया (इस मामले में) आदर्श गैस कानून का एक लिंक देखना पसंद कर सकता हूं।
पैट्रिक87

3

IMHO यह हमेशा बेहतर होता है कि यदि आप फ़ंक्शन बहुत डोमेन-विशिष्ट हैं, तो आप जिस समस्या डोमेन में काम कर रहे हैं, उसकी स्थापित संकेतन का उपयोग करें। कोई व्यक्ति जो समस्या डोमेन को नहीं समझता है, उसके पास किसी भी तरह आपके कोड को सफलतापूर्वक बनाए रखने का कोई मौका नहीं है, और किसी ऐसे व्यक्ति के लिए जो डोमेन से परिचित है, लंबे नाम सिर्फ शोर होंगे, साथ ही आपके लिए अधिक टाइपिंग भी।

OTHO, मैं कहूंगा कि मैं चाहता हूं कि पारंपरिक गणितीय संकेतन कई बार अधिक क्रियात्मक और वर्णनात्मक थे, लेकिन मुझे लगता है कि गणितीय संहिता को गणितीय सम्मेलन से चिपके रहना चाहिए।

संपादित करें: यह उत्तर केवल तभी लागू होता है जब गणितीय रूप से सूत्र लिखते समय संकेतन पर एक बहुत मजबूत सम्मेलन होता है। यदि कोई नहीं है, और आपको यह समझाना होगा कि चर एक टिप्पणी में क्या दर्शाते हैं, यहां तक ​​कि यह मानते हुए भी कि पाठक डोमेन से परिचित है, तो यह अधिक वर्णनात्मक सम्मेलन के पक्ष में गलती करने के लिए सबसे अच्छा है।


2

शुद्ध राय, लेकिन हमेशा एकल-अक्षर प्रतीकों पर शब्दों का उपयोग करें। यदि आप शब्दों का उपयोग करते हैं, तो हर कोई समझ जाएगा; यदि आप प्रतीकों का उपयोग करते हैं, तो केवल विषय-विशेषज्ञों का अनुसरण करने की गारंटी है। फिर भी, कुछ लोग समान भौतिक राशियों के लिए विभिन्न प्रतीकों का उपयोग करते हैं। आपके पास लंबे नामों का उपयोग करके खोने के लिए कुछ भी नहीं है।


2

आपकी चिंता स्पष्टता होनी चाहिए तब शुद्धता (गलत लेकिन स्पष्ट कोड आसानी से ठीक हो जाता है) इसलिए आपके फ़ंक्शन को जेनेरिक कोडर द्वारा बनाए रखा जा सकता है जहाँ तक संभव हो। फ़ंक्शन हेडर टिप्पणियों को सूत्र और इसके उपयोग की व्याख्या करनी चाहिए और इन / आउट मापदंडों का वर्णन करना चाहिए। तत्पश्चात फ़ंक्शन बॉडी कैसे बिछाई जाती है, यह तब तक बहुत अधिक मायने नहीं रखता जब तक कि यह शीर्ष लेख टिप्पणियों के अनुरूप हो।

(मुझे पता है कि यह एक चर्चा नहीं है लेकिन - मेरी व्यक्तिगत प्राथमिकता वराइबल्स को स्पष्ट नाम देना होगी, हालांकि इस मामले में एक 'लाइनर' पर्याप्त हो सकता है क्योंकि यह 'शुद्ध' फ़ंक्शन है, समान मापदंडों वाला कॉल समान होगा; परिणाम हमेशा ताकि राज्य से संबंधित जटिलता की आवश्यकता न हो।)

  • आयामी विश्लेषण का समर्थन करने वाली अन्य भाषाओं को फिर से लागू किया जा सकता है, उदाहरण के लिए C ++ में टेम्पलेट्स के साथ लागू किया जा सकता है, बूस्ट इकाइयां लाइब्रेरी इस दृष्टिकोण का उपयोग करती है जो मुझे विश्वास है।

1

निर्भर करता है कि व्यापार परत से "कितनी दूर" कोड है ... कोड के ढेर में पीछे की तरफ है, जितना अधिक लक्षित यह अमूर्त गणितीय कार्य के प्रति है, वह उतना ही अधिक है, जितना अधिक मैं आम तौर पर स्वीकृत का अनुकरण करने की कोशिश करूंगा। matehmatical संकेतन और नामकरण परंपराएँ .. सामने के छोर या व्यावसायिक परत के करीब, जितना अधिक मैं समस्या डोमेन में स्थापित सम्मेलनों के अनुरूप होगा।


1

मैं इसे इस तरह से सोचना पसंद करता हूं - गणितज्ञों को लघु चर के साथ गलत हो गया और भौतिकविदों ने सूट का पालन किया। अपनी गलती क्यों दोहराते हैं? अब हम जानते हैं कि अब नाम अधिक वर्णनात्मक हैं और कम भ्रम पैदा करते हैं, इसलिए सुधार के साथ रहें। एक हल्के नोट पर, मैं कभी-कभी इसे अपने गणित में लंबे समय तक चरने की कोशिश करता हूं, जिस पर सभी लोग प्रसन्न होते हैं।


आप इसे प्यार करने वाले हैं ...

0

एक प्रोग्रामिंग समीकरण के लिए सही प्रारूप वह है जिसे आप छह महीने तक नहीं देखने के बाद भी समझते हैं।

यदि आप वापस आते हैं:

n*R*T/P;

और आप पहचानते हैं कि क्या चल रहा है, तो यह शायद ठीक है। आम तौर पर उन्नत सूत्रों के लिए मैं नहीं होते याद क्या जब तक मैं सक्रिय रूप से यह उपयोग कर रहा हूँ प्रत्येक हिस्सा था। मेरे लिए:

n_moles * BOLTZMANN_CONSTANT * temperature / pressure;

विशेष रूप से एक बेहतर समीकरण प्रारूप है क्योंकि मैं आसानी से प्रत्येक भाग को समझ सकता हूं, भले ही मुझे जरूरी नहीं पता कि समीकरण क्यों लिखा गया हो।


आपको लगता है कि ऊर्जा_इन_जॉल्स = मास_इन_किगोग्राम्स * पाओ (गति_ऑफलाइट_इन_वैक्युम_इन_मेट्रेस-प्रति_सॉन्ड, 2) ई = एमसी 2 से ज्यादा आसान है
मार्टिन बेकेट

@ मर्टिन बेकेट, क्या आपने वास्तव में पढ़ा है कि मैंने क्या पोस्ट किया है? "आम तौर पर उन्नत formlas के लिए मैं नहीं होते याद प्रत्येक भाग का क्या जब तक मैं सक्रिय रूप से यह उपयोग कर रहा हूँ था।" मैंने यह नहीं कहा कि मैं उन समीकरणों को भूल जाऊंगा जो खुद को सार्वजनिक ज्ञान में धकेलने में कामयाब रहे हैं। मामलों की तरह में E=m*(c^2)मैं लूंगा छह महीने में यह समझते हैं।
zzzzBov

प्रसिद्ध शास्त्रीय समीकरणों के लिए सामान्य अंकन का उपयोग करना बेहतर होता है ताकि लोग इसे देख सकें। यहां तक ​​कि अगर थीटा या phi नामकरण की सीमा तक कि डोमेन में व्हाट्स का उपयोग किया जाता है
मार्टिन बेकेट

-1

सिक्का उछालें।

क्या आप भी कभी-कभी यह सोचने में अधिक समय व्यतीत करते हैं कि एक चर का नाम कैसे रखा जाए, जो आप स्वयं कोडिंग पर खर्च करते हैं?


6
हां, मैं आमतौर पर कोडिंग की तुलना में अपना कोड डिजाइन करने में अधिक समय बिताता हूं, और यह समस्या को समझने और चीजों को ठीक से नाम देने के साथ शुरू होता है।
मथियास
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.