Kendi işlevleriniz
Aynı formülü farklı sayılarla tekrar tekrar yazıyorsanız fonksiyona dönüştürün. Formüle ve girdilerine bir kez ad verin, ardından sonuç gerektiğinde çağırın: bahşiş hesabı, beden kitle indeksi kontrolü, tasarruf öngörüsü veya fatura için.
Bu sayfa, işlevleri tanımlama ve çağırma, notunuzdaki diğer isimleri nasıl kullandıkları, koşullar ve özyineleme ve geçerli sınırları kapsar. Varlig ile birlikte gelen sqrt ve round gibi işlevler için yerleşik işlev referansına bakın.
Fonksiyon tanımlama ve çağırma
Fonksiyonun adını, parametrelerini parantez içine, bir eşit işareti ve formülü yazın. Ardından aynı sırayla değerlerle çağırın:
tip(bill, pct) = bill * pcttip($48, 15%) sonucu $7.20tip($120, 12.5%) sonucu $15.00tip($36 + $12, 15%) sonucu $7.20Tanım satırı hiçbir yanıt göstermiyor. Her çağrı, değerlerinizi bill ve pct yerine koyar ve formülü hesaplar. Bir argüman, yukarıdaki $36 + $12 gibi tam bir hesaplama olabilir.
Argümanlar yalnızca sayı değil, tam değerlerdir. Bu nedenle ölçü ve para birimleri formül boyunca korunur:
bmi(weight, height) = weight / height^2bmi(81 kg, 1.8 m) sonucu 25 kg/m²Birimler verdiğiniz gibi tutulur, bu nedenle bmi(81 kg, 180 cm) kg/cm² cinsinden cevap verir. Ne geçirirseniz geçsin aynı birimi elde etmek için, işlevin içinde dönüştürün:
bmi(weight, height) = (weight / height^2) in kg/m^2bmi(81 kg, 180 cm) sonucu 25 kg/m²bmi(80 kg, 5.9 ft) sonucu 24.7375131668 kg/m²Bir fonksiyonun parametresi de olmayabilir. Hem tanımlarken hem de çağırdığınızda boş parantez yazın:
standard_vat() = 20%£120 * standard_vat() sonucu £24.00standard_vat = 20% gibi düz bir değişken genellikle daha az yazma ile aynı işi yapar.
Adlar ve parametreler
- İşlev ve parametre adları tek kelimelerdir. Boşluksuz
net_payveyabmi2gibi harfleri, rakamları ve alt çizgileri kullanın.area of circle(r) = pi * r^2yazarsanız, satır bunun yerine kullanılacak adı önerir:area_of_circle. - Fonksiyon adları büyük-küçük harfleri görmezden gelir:
Tip(bill, pct)'yi tanımladıktan sonratip($48, 15%)'yi çağırabilirsiniz. - Her parametrenin kendi adına ihtiyacı vardır.
f(a, a) = abir hatadır. - Bir fonksiyon 32 adede kadar parametreye sahip olabilir.
- Yerleşik bir fonksiyonun adını yeniden kullanamazsınız.
round(x) = …veyasqrt(x) = …yerine onu değiştirmek yerine bir hata gösterir. Sıradan bir değişken yine defloor = 12 m²gibi bu adlardan birini kullanabilir; İsimler bölümüne bakın. - Elektronik tablo uygulamalarındaki
avg,totalvestdevadlarını kendi fonksiyonlarınız için kullanabilirsiniz. Kenditotal(order)fonksiyonunuzu tanımlarsanız sizin tanımınız çalışır. - Bir işlev ve bir değişken bir adı paylaşabilir.
ratedeğişkeni okur verate(5)işlevi çağırır. - Her zaman parantez içinde bir fonksiyon çağırın. Fonksiyon adı tek başına, aynı isimde değişken olmadan hiçbir şey göstermez. İstisnalar
sum,total,subtotal,grand total,average,maxvemindir; bunlar yukarıdaki satırlar için o sayıyı hesaplar; bkz. Yukarıdaki satırları toplama.
Bağımsız değişkenlerde virgüller
Ardından boşluk gelen virgül argümanları ayırır. Ardından tam üç rakam gelen virgül ise binlik ayırıcıdır. Böylece tutarları alıştığınız biçimde yazabilirsiniz:
tip(bill, pct) = bill * pcttip($1,200, 15%) sonucu $180.00tip($1200,15%) sonucu $180.00Boşluklara göre ayrılan değerlerin sayısı fonksiyonun istediğinden azsa ikinci çağrıdaki gibi her virgül ayırıcı olarak kullanılır. Kesirli kısım için ondalık nokta kullanın; örneğin tip($48, 12.5%).
Notunuzdaki diğer adları kullanma
Bir işlev notunuzdaki değişkenleri kullanabilir. Her çağırdığınızda mevcut değerlerini okur:
vat = 20%with_vat(price) = price * (1 + vat)with_vat(£50) sonucu £60.00vat = 5%with_vat(£50) sonucu £52.50Fonksiyonu tanımlarken değişken zaten mevcut olmalıdır, bu nedenle with_vat üzerine vat = 20% koyun. Henüz mevcut değilse, tanım satırı bir hata gösterir.
Parametreler işlev için yereldir. price adlı bir parametre, notun başka bir yerinde price adlı bir değişkeni okumaz veya değiştirmez:
price = £10double(price) = price * 2double(£3) sonucu £6.00price sonucu £10.00Değişkenler gibi, bir hesaplama bloğunda tanımlanan fonksiyon da aynı notun sonraki bloklarında kullanılabilir. Varlig notu yukarıdan aşağıya işler; bu yüzden fonksiyonu ilk çağrıldığı satırın üstünde tanımlayın. Tanımdan önceki çağrı sonuç göstermez.
Başka fonksiyonları çağıran fonksiyonlar
Küçük fonksiyonlar birbirlerinin üzerine inşa edilebilir:
day_rate = £400fee(days) = days * day_rateinvoice(days) = fee(days) * 1.2invoice(5) sonucu £2,400.00Bir işlev, onu tanımladığınızda var olan bir yardımcının sürümünü hatırlar. Aynı yardımcıyı daha aşağıda tekrar tanımlarsanız, daha önce tanımlanan işlevler eski sürümü kullanmaya devam eder:
shipping(order) = £4.95total(order) = order + shipping(order)shipping(order) = £2.95total(£30) sonucu £34.95shipping(£30) sonucu £2.95Yeni shipping'i almak için, aşağıda tekrar total'ı tanımlayın. Tanımı yerinde düzenlemek bunu tetiklemez. Varlig notu üstten yeniden hesaplar, bu nedenle aşağıdaki her şey düzenlenmiş versiyonunuzu kullanır.
Bir fonksiyon, daha aşağıda tanımlayacağınız yardımcı fonksiyonu da çağırabilir. Bu durumda çağrı anındaki yardımcı tanımı kullanılır. Dolayısıyla dış fonksiyonu çağırdığınızda yardımcı fonksiyonun tanımlanmış olması gerekir:
checkout(order) = order + delivery(order)delivery(order) = if order >= £40 then £0 else £3.50checkout(£25) sonucu £28.50checkout(£60) sonucu £60.00Koşullar
Sonuçlar arasında seçim yapmak için if … then … else … kullanın. İki durumdan fazla için else'den sonra başka bir if zinciri kullanın:
postage(weight) = if weight <= 100 g then £0.85 else if weight <= 750 g then £1.55 else £3.20postage(90 g) sonucu £0.85postage(500 g) sonucu £1.55postage(1.2 kg) sonucu £3.20Yalnızca koşula uyan dal hesaplanır. Böylece sıfıra bölme gibi aksi halde hata verecek işlemleri koşulla engelleyebilirsiniz:
per_person(total, people) = if people > 0 then total / people else £0per_person(£90, 3) sonucu £30.00per_person(£90, 0) sonucu £0.00Özyineleme
Bir işlev, bir koşul sonunda onu durdurduğu sürece kendini çağırabilir. Bu, bir gruptaki herkes bir kez el sıkıştığında el sıkışmaları sayar:
handshakes(people) = if people <= 1 then 0 else (people - 1) + handshakes(people - 1)handshakes(6) sonucu 15handshakes(10) sonucu 45Her çağrı bir seviye daha derinine iner ve en fazla 12 iç içe çağrıya izin verilir. handshakes(12) hâlâ çalışıyor, ancak handshakes(13) Error: calculation limit gösteriyor. Bir fonksiyonu tanımladığınızda durma durumuna asla ulaşmayan bir fonksiyon kabul edilir ve onu çağırdığınızda aynı limite ulaşır. İki fonksiyon aynı limite dahilinde birbirini de çağırabilir.
Günlük sayım için, entegre fonksiyonlar daha hızlıdır ve böyle bir sınırlaması yoktur. combination(10, 2) ayrıca 45 verir ve factorial(n), veya n!, klasik özyineli örnekleri kapsar.
Listeler, matrisler ve diğer türler
Argümanlar listeler, matrisler veya karmaşık sayılar olabilir ve bir gövde herhangi bir yerleşik işlevi kullanabilir:
spread(scores) = max(scores) - min(scores)spread([12, 18, 9, 21]) sonucu 12Bir gövde ayrıca kendi yerel değişkenine sahip bir toplam veya denklem çözücü içerebilir. Listeler ve istatistikler ve Toplam, denklem çözümü ve kalkülüs bölümüne bakın.
Dikkat edilecek noktalar
- Üsleri
^ile yazın. Fonksiyon içindex²kabul edilmez. Kısa parametre adları birimlerle de karışabilir:w / h²içindekih²,hparametresinin karesi değil saat karesidir.w / h^2yazın. - Argüman sayısını kontrol edin. Fonksiyon iki değer beklediğinde
tip($48)çağrısı bir hata gösterir. - Birim belirtilmeden yazılan fiyat, birim başına fiyat olarak yorumlanır.
oats(amount) = amount / 1 kg * £0.95ifadesinde £0.95, kilogram başına fiyattır. Her çağrı bunu belirtir. Üzerine geldiğinizde oats içindeki £0.95 tutarının kg başına fiyat kabul edildiği ve açıkça belirtmek için £0.95/kg yazabileceğiniz açıklanır. Tanımda oranı açıkça yazmak bu açıklamayı kaldırır. - Bir satır, bir formül. Bir tanım, tek bir satırda tek bir ifadedir. Birkaç adım içeren bir hesaplama için, her adım için küçük bir fonksiyon tanımlayın ve bunları birleştirin.
- Bozuk bir yeniden tanımlama eski sürümü korur.
tipiçin yeni bir tanım hataysa, satır bir hata gösterir ve önceki çalışantipkullanılmaya devam eder. - Not yeniden hesaplandığında sonuçlar değişebilir. Fonksiyon çağrıları her seferinde yeniden hesaplanır. Bu nedenle
randomveya bugünün tarihini kullanan fonksiyon yeni sonuç verebilir. - Hatalar ortaya çıkar. Bir argüman formülü başarısız kılıyorsa, örneğin sıfıra bölme gibi, çağrı bu hatayı gösterir.
Sınırlar
| Öğe | Sınır |
|---|---|
| Fonksiyon başına parametre sayısı | 32 |
| İç içe çağrılar (bir fonksiyonun kendisini veya başka bir fonksiyonu çağırması) | 12 |
| En üst düzeydeki bir çağrı hesaplanırken yapılan çağrı sayısı | 16,384 |
| Bir notta tanımlanan fonksiyonlar | 1,024 |
Bir limite ulaşıldığında Error: calculation limit gösterilir. Notun geri kalanı çalışmaya devam eder. Her limite ilişkin Hatalar, teşhisler ve limitler bölümüne bakın.
Hepsini bir araya getirme
İşte serbest çalışma için bir fatura örneği. Günlük ücret ve KDV oranı en üstte adlandırılmış değerlerdir; üç küçük fonksiyon hesabı yapar:
# 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) sonucu £3,600.00build = fee(4.5) sonucu £2,025.00subtotal = design + build sonucu £5,625.00with_vat(subtotal) sonucu £6,750.00late_fee(with_vat(subtotal), 45) sonucu £135.00day_rate veya vat değiştirin ve aşağıdaki her satır güncellenir. Müşteri geç ödeme yaptığında, bir çağrı ücreti ekler.