अपने फ़ंक्शन
जब आप एक ही सूत्र को बार-बार अलग-अलग संख्याओं के साथ टाइप करते हैं, तो इसे एक फ़ंक्शन में बदल दें। आप सूत्र और उसके इनपुट को एक बार नाम देते हैं, फिर जहां भी आपको उत्तर की आवश्यकता होती है, उसे कॉल करें: एक टिप कैलकुलेटर, एक बीएमआई चेक, एक बचत प्रक्षेपण या एक चालान।
यह पेज फ़ंक्शन परिभाषित करना और चलाना, नोट के दूसरे नामों का उनमें उपयोग, शर्तें, पुनरावर्ती कॉल और लागू सीमाएँ समझाता है। Varlig के साथ आने वाले sqrt और round जैसे फ़ंक्शन के लिए बिल्ट-इन फ़ंक्शन संदर्भ देखें।
एक फ़ंक्शन को परिभाषित करना और कॉल करना
फ़ंक्शन का नाम, कोष्ठक में इसके पैरामीटर, एक बराबर चिह्न और सूत्र लिखें। फिर इसे उसी क्रम में मानों के साथ कॉल करेंः
tip(bill, pct) = bill * pcttip($48, 15%) परिणाम $7.20tip($120, 12.5%) परिणाम $15.00tip($36 + $12, 15%) परिणाम $7.20परिभाषा वाली पंक्ति कोई उत्तर नहीं दिखाती। हर कॉल आपके दिए मान bill और pct की जगह रखकर सूत्र हल करता है। आर्ग्युमेंट पूरी गणना भी हो सकता है, जैसे ऊपर $36 + $12।
आर्ग्युमेंट केवल साधारण संख्या नहीं, पूरा मान होता है। इसलिए सूत्र में इकाइयाँ और मुद्राएँ भी बनी रहती हैं:
bmi(weight, height) = weight / height^2bmi(81 kg, 1.8 m) परिणाम 25 kg/m²इकाइयों को वैसे ही रखा जाता है जैसे आप उन्हें देते हैं, इसलिए bmi(81 kg, 180 cm) kg/cm² में उत्तर देता है। वही इकाई प्राप्त करने के लिए जो भी आप पास करते हैं, फ़ंक्शन के अंदर कनवर्ट करें:
bmi(weight, height) = (weight / height^2) in kg/m^2bmi(81 kg, 180 cm) परिणाम 25 kg/m²bmi(80 kg, 5.9 ft) परिणाम 24.7375131668 kg/m²एक फ़ंक्शन में कोई पैरामीटर भी नहीं हो सकता है। ख़ाली कोष्ठक लिखें जब आप इसे परिभाषित करते हैं और जब आप इसे कॉल करते हैं:
standard_vat() = 20%£120 * standard_vat() परिणाम £24.00एक सादा चर, जैसे कि standard_vat = 20%, आमतौर पर कम टाइपिंग के साथ एक ही काम करता है।
नाम और पैरामीटर
- फ़ंक्शन और पैरामीटर नाम एकल शब्द हैं। अक्षरों, अंकों और अंडरस्कोर का उपयोग करें, जैसे कि
net_payयाbmi2, बिना रिक्त स्थान के। यदि आप लिखते हैंarea of circle(r) = pi * r^2, तो पंक्ति इसके बजाय उपयोग करने के लिए नाम का सुझाव देती है:area_of_circle। - फ़ंक्शन के नाम में बड़े-छोटे अक्षरों का फर्क नहीं पड़ता:
Tip(bill, pct)परिभाषित करने के बादtip($48, 15%)से चला सकते हैं। - प्रत्येक पैरामीटर को अपने स्वयं के नाम की आवश्यकता होती है।
f(a, a) = aएक त्रुटि है। - एक फ़ंक्शन में 32 पैरामीटर तक हो सकते हैं।
- आप एक अंतर्निहित फ़ंक्शन के नाम का पुन: उपयोग नहीं कर सकते।
round(x) = …याsqrt(x) = …इसे बदलने के बजाय एक त्रुटि दिखाता है। एक साधारण चर अभी भी उन नामों में से एक का उपयोग कर सकता है, जैसेfloor = 12 m²; देखें Names। - स्प्रेडशीट में प्रचलित
avg,totalऔरstdevनाम अपने फ़ंक्शन के लिए इस्तेमाल कर सकते हैं। अपनाtotal(order)परिभाषित करें तो वही संस्करण चलेगा। - एक फ़ंक्शन और एक चर एक नाम साझा कर सकते हैं।
rateचर को पढ़ता है औरrate(5)फ़ंक्शन को कॉल करता है। - फ़ंक्शन हमेशा कोष्ठकों के साथ चलाएँ। अकेला फ़ंक्शन नाम कुछ नहीं दिखाता, जब तक उसी नाम का चर भी न हो। अपवाद
sum,total,subtotal,grand total,average,maxऔरminहैं; ये अपने ऊपर की पंक्तियों से संबंधित आँकड़ा निकालते हैं। ऊपर की पंक्तियों को जोड़ना देखें।
आर्ग्युमेंट में अल्पविराम
अल्पविराम के बाद स्पेस हो तो वह आर्ग्युमेंट अलग करता है। अल्पविराम के बाद ठीक तीन अंक हों तो वह हज़ारों का विभाजक होता है। इसलिए रकम सामान्य तरीके से लिख सकते हैं:
tip(bill, pct) = bill * pcttip($1,200, 15%) परिणाम $180.00tip($1200,15%) परिणाम $180.00स्पेस से अलग किए गए हिस्सों की तुलना में फ़ंक्शन को अधिक मान चाहिए हों, तो हर अल्पविराम आर्ग्युमेंट अलग करता है, जैसा दूसरे कॉल में है। भिन्नात्मक मान के लिए दशमलव बिंदु इस्तेमाल करें, जैसे tip($48, 12.5%)।
अपने नोट में अन्य नामों का उपयोग करना
एक फ़ंक्शन आपके नोट से चर का उपयोग कर सकता है। हर बार जब आप इसे कॉल करते हैं तो यह उनका वर्तमान मूल्य पढ़ता हैः
vat = 20%with_vat(price) = price * (1 + vat)with_vat(£50) परिणाम £60.00vat = 5%with_vat(£50) परिणाम £52.50जब आप फ़ंक्शन को परिभाषित करते हैं तो चर पहले से मौजूद होना चाहिए, इसलिए with_vat से ऊपर vat = 20% डालें। यदि यह अभी तक मौजूद नहीं है, तो परिभाषा रेखा एक त्रुटि दिखाती है।
पैरामीटर फ़ंक्शन के लिए स्थानीय हैं। price नामक एक पैरामीटर नोट में कहीं और price नामक चर को नहीं पढ़ता या बदलता है:
price = £10double(price) = price * 2double(£3) परिणाम £6.00price परिणाम £10.00चरों की तरह, एक Calc ब्लॉक में परिभाषित फ़ंक्शन को उसी नोट में बाद के Calc ब्लॉक में उपयोग किया जा सकता है। Varlig नोट को ऊपर से नीचे तक प्रोसेस करता है, इसलिए उस फ़ंक्शन को कॉल करने वाले पहले पंक्ति के ऊपर एक फ़ंक्शन परिभाषित करें। परिभाषा के ऊपर कॉल करने पर कोई उत्तर नहीं दिखाई देता।
अन्य फ़ंक्शन को कॉल करने वाले फ़ंक्शन
छोटे फ़ंक्शन एक-दूसरे का उपयोग कर सकते हैं:
day_rate = £400fee(days) = days * day_rateinvoice(days) = fee(days) * 1.2invoice(5) परिणाम £2,400.00फ़ंक्शन परिभाषित होते समय जिस सहायक फ़ंक्शन का संस्करण मौजूद था, उसे याद रखता है। नीचे उसी सहायक को फिर परिभाषित करें तो पहले बने फ़ंक्शन पुराने संस्करण का उपयोग करते रहते हैं:
shipping(order) = £4.95total(order) = order + shipping(order)shipping(order) = £2.95total(£30) परिणाम £34.95shipping(£30) परिणाम £2.95नया shipping इस्तेमाल करने के लिए उसके नीचे total फिर परिभाषित करें। मौजूदा परिभाषा को उसी जगह संपादित करने पर यह समस्या नहीं होती। Varlig नोट को ऊपर से फिर गणना करता है, इसलिए नीचे सभी कॉल संपादित संस्करण इस्तेमाल करते हैं।
फ़ंक्शन उस सहायक फ़ंक्शन को भी बुला सकता है जो नीचे परिभाषित हो। इस स्थिति में कॉल के समय मौजूद सहायक का संस्करण इस्तेमाल होता है। इसलिए बाहरी फ़ंक्शन चलाने तक सहायक परिभाषित हो जाना चाहिए:
checkout(order) = order + delivery(order)delivery(order) = if order >= £40 then £0 else £3.50checkout(£25) परिणाम £28.50checkout(£60) परिणाम £60.00शर्तें
परिणामों के बीच चयन करने के लिए if … then … else … का उपयोग करें। दो से अधिक मामलों के लिए else के बाद एक और if चेन करें:
postage(weight) = if weight <= 100 g then £0.85 else if weight <= 750 g then £1.55 else £3.20postage(90 g) परिणाम £0.85postage(500 g) परिणाम £1.55postage(1.2 kg) परिणाम £3.20केवल लागू होने वाली शाखा पर काम किया जाता है। यह आपको एक गणना से बचाव करने देता है जो अन्यथा विफल हो जाएगा, जैसे कि शून्य से विभाजित करना:
per_person(total, people) = if people > 0 then total / people else £0per_person(£90, 3) परिणाम £30.00per_person(£90, 0) परिणाम £0.00रिकर्शन
फ़ंक्शन खुद को बुला सकता है, बशर्ते कोई शर्त अंततः उसे रोक दे। यह उदाहरण समूह में हर व्यक्ति के हर दूसरे व्यक्ति से एक बार हाथ मिलाने की कुल संख्या निकालता है:
handshakes(people) = if people <= 1 then 0 else (people - 1) + handshakes(people - 1)handshakes(6) परिणाम 15handshakes(10) परिणाम 45हर कॉल एक स्तर और भीतर जाती है। अधिकतम 12 स्तर की कॉल अनुमत हैं। handshakes(12) काम करता है, लेकिन handshakes(13) पर Error: calculation limit आता है। ऐसा फ़ंक्शन जो कभी रुकने की शर्त तक नहीं पहुँचता, परिभाषित तो हो सकता है, पर चलाने पर इसी सीमा से रुकता है। दो फ़ंक्शन भी इसी सीमा के भीतर एक-दूसरे को बुला सकते हैं।
सामान्य गिनती के लिए बिल्ट-इन फ़ंक्शन तेज़ हैं और उन पर यह सीमा लागू नहीं होती। combination(10, 2) भी 45 देता है। factorial(n) या n! से पुनरावर्ती गणना वाला परिचित फ़ैक्टोरियल उदाहरण हल होता है।
सूचियां, मैट्रिक्स और बहुत कुछ
आर्ग्युमेंट सूचियाँ, आव्यूह या सम्मिश्र संख्याएँ हो सकते हैं। फ़ंक्शन की अभिव्यक्ति में कोई भी बिल्ट-इन फ़ंक्शन इस्तेमाल कर सकते हैं:
spread(scores) = max(scores) - min(scores)spread([12, 18, 9, 21]) परिणाम 12फ़ंक्शन की अभिव्यक्ति में अपने स्थानीय चर वाला योग या समीकरण हल करने वाला फ़ंक्शन भी हो सकता है। सूचियाँ और सांख्यिकी तथा योग, समीकरण हल करना और कलन देखें।
आम गलतियाँ
^का उपयोग करके घात लिखें।x²फ़ंक्शन के अंदर स्वीकार नहीं किया जाता है। इससे भी बदतर, एक छोटा पैरामीटर नाम एक इकाई से मेल खा सकता है:w / h²में,h²का अर्थ वर्ग घंटे है, पैरामीटरhनहीं।w / h^2लिखें।- पैरामीटरों की संख्या जांचें। जब फ़ंक्शन दो मानों की अपेक्षा करता है, तो
tip($48)को कॉल करने पर त्रुटि दिखाई देती है। - अकेली रकम को प्रति इकाई कीमत माना जाता है।
oats(amount) = amount / 1 kg * £0.95में £0.95 प्रति किलोग्राम कीमत है। हर कॉल इसकी सूचना देती है। पॉइंटर रखने पर “£0.95 in oats treated as a price per kg. Write £0.95/kg there to make it explicit.” दिखता है। परिभाषा में दर स्पष्ट लिख देने पर यह सूचना हट जाती है। - एक पंक्ति, एक सूत्र। एक परिभाषा एक ही पंक्ति में एक ही अभिव्यक्ति होती है। कई चरणों वाली गणना के लिए, प्रत्येक चरण के लिए एक छोटा फ़ंक्शन परिभाषित करें और उन्हें मिलाएं।
- गलत नई परिभाषा होने पर पुराना संस्करण बना रहता है।
tipकी नई परिभाषा में गलती हो तो पंक्ति त्रुटि दिखाती है और पहले वाला सहीtipउपलब्ध रहता है। - नोट रीकैल्कुल होने पर उत्तर बदल सकते हैं। प्रत्येक बार कॉल की गणना फिर से की जाती है, इसलिए एक फ़ंक्शन जो
randomया आज की तिथि का उपयोग करता है, एक नया उत्तर दे सकता है। - त्रुटियाँ आगे भी दिखाई जाती हैं। कोई आर्ग्युमेंट सूत्र में त्रुटि पैदा करे, जैसे शून्य से भाग, तो कॉल वही त्रुटि दिखाती है।
सीमाएं
| क्या | सीमा |
|---|---|
| पैरामीटर प्रति फ़ंक्शन | 32 |
| नेस्टेड कॉल (एक फ़ंक्शन खुद को या किसी अन्य को कॉल करता है) | 12 |
| एक शीर्ष-स्तरीय कॉल पर काम करते समय किए गए कॉल | 16,384 |
| एक नोट में परिभाषित फ़ंक्शन | 1,024 |
सीमा को छूने पर Error: calculation limit दिखाई देता है। नोट का बाकी हिस्सा काम करता रहता है। प्रत्येक सीमा के लिए Errors, diagnostics and limits देखें।
इसे एक साथ रखना
यह फ्रीलांस काम का इनवॉइस है। ऊपर दर और VAT नाम वाले मान हैं; तीन छोटे फ़ंक्शन हिसाब करते हैं:
# March invoiceday_rate = £450vat = 20%fee(days) = days * day_ratewith_vat(amount) = amount * (1 + vat)late_fee(amount, days_late) = if days_late > 30 then amount * 2% else £0design = fee(8) परिणाम £3,600.00build = fee(4.5) परिणाम £2,025.00subtotal = design + build परिणाम £5,625.00with_vat(subtotal) परिणाम £6,750.00late_fee(with_vat(subtotal), 45) परिणाम £135.00day_rate या vat बदलते ही नीचे की सभी पंक्तियाँ अपडेट हो जाती हैं। ग्राहक देर से भुगतान करे तो एक कॉल से शुल्क जोड़ सकते हैं।