İçeriğe atla
Varlig Kılavuzu
Varlig ana sayfası

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:

calc
tip(bill, pct) = bill * pct
tip($48, 15%) sonucu $7.20
tip($120, 12.5%) sonucu $15.00
tip($36 + $12, 15%) sonucu $7.20

Tanı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:

calc
bmi(weight, height) = weight / height^2
bmi(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:

calc
bmi(weight, height) = (weight / height^2) in kg/m^2
bmi(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:

calc
standard_vat() = 20%
£120 * standard_vat() sonucu £24.00

standard_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_pay veya bmi2 gibi harfleri, rakamları ve alt çizgileri kullanın. area of circle(r) = pi * r^2 yazarsanı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 sonra tip($48, 15%)'yi çağırabilirsiniz.
  • Her parametrenin kendi adına ihtiyacı vardır. f(a, a) = a bir hatadır.
  • Bir fonksiyon 32 adede kadar parametreye sahip olabilir.
  • Yerleşik bir fonksiyonun adını yeniden kullanamazsınız. round(x) = … veya sqrt(x) = … yerine onu değiştirmek yerine bir hata gösterir. Sıradan bir değişken yine de floor = 12 m² gibi bu adlardan birini kullanabilir; İsimler bölümüne bakın.
  • Elektronik tablo uygulamalarındaki avg, total ve stdev adlarını kendi fonksiyonlarınız için kullanabilirsiniz. Kendi total(order) fonksiyonunuzu tanımlarsanız sizin tanımınız çalışır.
  • Bir işlev ve bir değişken bir adı paylaşabilir. rate değişkeni okur ve rate(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, max ve mindir; 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:

calc
tip(bill, pct) = bill * pct
tip($1,200, 15%) sonucu $180.00
tip($1200,15%) sonucu $180.00

Boş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:

calc
vat = 20%
with_vat(price) = price * (1 + vat)
with_vat(£50) sonucu £60.00
vat = 5%
with_vat(£50) sonucu £52.50

Fonksiyonu 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:

calc
price = £10
double(price) = price * 2
double(£3) sonucu £6.00
price sonucu £10.00

Değ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:

calc
day_rate = £400
fee(days) = days * day_rate
invoice(days) = fee(days) * 1.2
invoice(5) sonucu £2,400.00

Bir 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:

calc
shipping(order) = £4.95
total(order) = order + shipping(order)
shipping(order) = £2.95
total(£30) sonucu £34.95
shipping(£30) sonucu £2.95

Yeni 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:

calc
checkout(order) = order + delivery(order)
delivery(order) = if order >= £40 then £0 else £3.50
checkout(£25) sonucu £28.50
checkout(£60) sonucu £60.00

Koş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:

calc
postage(weight) = if weight <= 100 g then £0.85 else if weight <= 750 g then £1.55 else £3.20
postage(90 g) sonucu £0.85
postage(500 g) sonucu £1.55
postage(1.2 kg) sonucu £3.20

Yalnızca koşula uyan dal hesaplanır. Böylece sıfıra bölme gibi aksi halde hata verecek işlemleri koşulla engelleyebilirsiniz:

calc
per_person(total, people) = if people > 0 then total / people else £0
per_person(£90, 3) sonucu £30.00
per_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:

calc
handshakes(people) = if people <= 1 then 0 else (people - 1) + handshakes(people - 1)
handshakes(6) sonucu 15
handshakes(10) sonucu 45

Her ç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:

calc
spread(scores) = max(scores) - min(scores)
spread([12, 18, 9, 21]) sonucu 12

Bir 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çinde x² kabul edilmez. Kısa parametre adları birimlerle de karışabilir: w / h² içindeki h², h parametresinin karesi değil saat karesidir. w / h^2 yazı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.95 ifadesinde £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. tip için yeni bir tanım hataysa, satır bir hata gösterir ve önceki çalışan tip kullanılmaya devam eder.
  • Not yeniden hesaplandığında sonuçlar değişebilir. Fonksiyon çağrıları her seferinde yeniden hesaplanır. Bu nedenle random veya 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:

calc
# March invoice
day_rate = £450
vat = 20%
fee(days) = days * day_rate
with_vat(amount) = amount * (1 + vat)
late_fee(amount, days_late) = if days_late > 30 then amount * 2% else £0
design = fee(8) sonucu £3,600.00
build = fee(4.5) sonucu £2,025.00
subtotal = design + build sonucu £5,625.00
with_vat(subtotal) sonucu £6,750.00
late_fee(with_vat(subtotal), 45) sonucu £135.00

day_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.