Lewati ke konten
Panduan Varlig
Beranda Varlig

Fungsi buatan sendiri

Ketika Anda mengetik rumus yang sama berulang kali dengan angka yang berbeda, ubah menjadi sebuah fungsi. Anda menyebutkan rumus dan masukannya sekali, lalu memanggilnya di mana pun Anda membutuhkan jawaban: kalkulator tip, cek BMI, proyeksi tabungan, atau faktur.

Halaman ini mencakup mendefinisikan dan memanggil fungsi, bagaimana mereka menggunakan nama lain dalam catatan Anda, kondisi dan rekursi, dan batasan yang berlaku. Untuk fungsi yang datang dengan Varlig, seperti sqrt dan round, lihat referensi fungsi bawaan.

Mendefinisikan dan memanggil sebuah fungsi

Tulis nama fungsi, parameternya dalam tanda kurung, tanda sama dengan dan rumus. Kemudian memanggilnya dengan nilai-nilai dalam urutan yang sama:

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

Garis definisi tidak menunjukkan jawaban. Setiap panggilan menempatkan nilai Anda di tempat bill dan pct dan mengerjakan rumusnya. Argumen dapat berupa perhitungan keseluruhan, seperti $36 + $12 di atas.

Argumen adalah nilai penuh, bukan hanya angka, jadi satuan dan mata uang membawa melalui rumus:

calc
bmi(weight, height) = weight / height^2
bmi(81 kg, 1.8 m) menghasilkan 25 kg/m²

Satuan dipertahankan sesuai masukan, sehingga bmi(81 kg, 180 cm) menghasilkan kg/cm². Agar satuan hasil selalu sama untuk masukan apa pun, lakukan konversi di dalam fungsi:

calc
bmi(weight, height) = (weight / height^2) in kg/m^2
bmi(81 kg, 180 cm) menghasilkan 25 kg/m²
bmi(80 kg, 5.9 ft) menghasilkan 24.7375131668 kg/m²

Fungsi juga boleh tidak memiliki parameter. Gunakan tanda kurung kosong saat mendefinisikan maupun memanggilnya:

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

Variabel biasa, seperti standard_vat = 20%, biasanya melakukan pekerjaan yang sama dengan mengetik lebih sedikit.

Nama dan parameter

  • Nama fungsi dan parameter adalah kata-kata tunggal. Gunakan huruf, angka, dan garis bawah, seperti net_pay atau bmi2, tanpa spasi. Jika Anda menulis area of circle(r) = pi * r^2, baris tersebut menyarankan nama untuk digunakan sebagai gantinya: area_of_circle.
  • Nama fungsi tidak membedakan huruf besar dan kecil: setelah mendefinisikan Tip(bill, pct), Anda dapat memanggil tip($48, 15%).
  • Setiap parameter membutuhkan namanya sendiri. f(a, a) = a adalah sebuah kesalahan.
  • Sebuah fungsi dapat memiliki hingga 32 parameter.
  • Nama fungsi bawaan tidak boleh digunakan kembali untuk fungsi buatan sendiri. round(x) = … atau sqrt(x) = … menghasilkan kesalahan, bukan menggantikan fungsi bawaan. Variabel biasa tetap boleh memakai nama tersebut, misalnya floor = 12 m²; lihat Nama.
  • Nama yang lazim di aplikasi lembar kerja, yaitu avg, total, dan stdev, boleh digunakan untuk fungsi buatan Anda. Jika Anda mendefinisikan total(order), versi Andalah yang dijalankan.
  • Sebuah fungsi dan variabel dapat berbagi nama. rate membaca variabel dan rate(5) memanggil fungsi.
  • Selalu panggil fungsi dengan tanda kurung. Nama fungsi sendiri, tanpa variabel dengan nama yang sama, tidak menunjukkan apa-apa. Pengecualiannya adalah sum, total, subtotal, grand total, average, max dan min, yang menghasilkan angka itu untuk baris di atasnya; lihat Menjumlahkan baris di atas.

Koma dalam argumen

Koma diikuti dengan spasi memisahkan argumen, dan koma diikuti oleh tepat tiga digit kelompok ribuan, sehingga Anda dapat menulis jumlah seperti biasanya:

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

Jika pemisah berupa koma dan spasi belum menghasilkan cukup argumen untuk fungsi tersebut, setiap koma dianggap pemisah, seperti pada pemanggilan kedua. Gunakan titik desimal untuk nilai pecahan, misalnya tip($48, 12.5%).

Menggunakan nama lain dalam catatan Anda

Sebuah fungsi dapat menggunakan variabel dari catatan Anda. Ini membaca nilai mereka saat ini setiap kali Anda memanggilnya:

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

Variabel harus sudah ada ketika Anda mendefinisikan fungsi, jadi letakkan vat = 20% di atas with_vat. Jika belum ada, garis definisi menunjukkan kesalahan.

Parameter bersifat lokal untuk fungsi. Parameter yang disebut price tidak membaca atau mengubah variabel yang disebut price di tempat lain dalam catatan:

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

Seperti variabel, fungsi yang didefinisikan dalam satu blok perhitungan dapat digunakan dalam blok berikutnya pada catatan yang sama. Varlig memproses catatan dari atas ke bawah, jadi letakkan definisi fungsi sebelum baris pertama yang memanggilnya. Pemanggilan sebelum definisi tidak menampilkan hasil.

Fungsi yang memanggil fungsi lain

Fungsi-fungsi kecil dapat dibangun satu sama lain:

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

Fungsi mengingat versi fungsi bantu yang ada saat definisinya dibuat. Jika Anda mendefinisikan ulang fungsi bantu yang sama di baris berikutnya, fungsi yang didefinisikan sebelumnya tetap menggunakan versi lama:

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

Untuk mengambil shipping baru, tentukan total lagi di bawahnya. Mengedit definisi di tempat tidak menyebabkan ini. Varlig menghitung ulang catatan dari atas, jadi semua yang ada di bawah ini menggunakan versi Anda yang telah diedit.

Fungsi juga dapat memanggil fungsi bantu yang baru didefinisikan di bagian berikutnya. Dalam kasus ini, versi fungsi bantu yang tersedia saat pemanggilan akan digunakan. Jadi, fungsi bantu harus sudah ada ketika fungsi luar dipanggil:

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

Kondisi

Gunakan if … then … else … untuk memilih di antara hasil. Rantai lain if setelah else untuk lebih dari dua kasus:

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

Hanya cabang yang berlaku yang dikerjakan. Itu memungkinkan Anda untuk menjaga terhadap perhitungan yang jika tidak akan gagal, seperti membagi dengan nol:

calc
per_person(total, people) = if people > 0 then total / people else £0
per_person(£90, 3) menghasilkan £30.00
per_person(£90, 0) menghasilkan £0.00

Rekursi

Fungsi dapat memanggil dirinya sendiri asalkan ada kondisi yang akhirnya menghentikannya. Contoh ini menghitung jumlah jabat tangan ketika setiap orang dalam kelompok berjabat tangan sekali dengan setiap orang lainnya:

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

Setiap panggilan bersarang satu tingkat lebih dalam, dan paling banyak 12 panggilan bersarang diperbolehkan. handshakes(12) masih berfungsi, tetapi handshakes(13) menunjukkan Error: calculation limit. Sebuah fungsi yang tidak pernah mencapai kasus berhentinya diterima ketika Anda mendefinisikannya, dan mencapai batas yang sama ketika Anda memanggilnya. Dua fungsi juga dapat memanggil satu sama lain, dalam batas yang sama.

Untuk penghitungan sehari-hari, fungsi bawaan lebih cepat dan tidak memiliki batasan seperti itu. combination(10, 2) juga memberikan 45, dan factorial(n) atau n!, mencakup contoh rekursif klasik.

Daftar, matriks dan banyak lagi

Argumen dapat berupa daftar, matriks, atau bilangan kompleks, dan isi fungsi dapat memakai fungsi bawaan apa pun:

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

Isi fungsi juga dapat memuat penjumlahan deret atau pemecah persamaan dengan variabel lokalnya sendiri. Lihat Daftar dan statistik serta Penjumlahan, penyelesaian persamaan, dan kalkulus.

Jebakan

  • Tulis pangkat dengan ^. x² tidak diterima di dalam fungsi. Nama parameter yang pendek juga dapat tertukar dengan satuan: dalam w / h², h² berarti jam kuadrat, bukan parameter h. Tulis w / h^2.
  • Periksa jumlah argumen. Memanggil tip($48) ketika fungsi mengharapkan dua nilai menunjukkan kesalahan.
  • Harga tanpa satuan ditafsirkan sebagai harga per satuan. Dalam oats(amount) = amount / 1 kg * £0.95, £0,95 dianggap harga per kilogram. Setiap pemanggilan menyertakan penjelasan; arahkan penunjuk untuk melihat bahwa £0,95 dalam oats ditafsirkan sebagai harga per kg dan bahwa penulisan £0,95/kg akan memperjelasnya. Menulis harga per satuan secara eksplisit dalam definisi menghilangkan pemberitahuan tersebut.
  • Satu baris, satu rumus. Definisi adalah ekspresi tunggal pada satu baris. Untuk perhitungan dengan beberapa langkah, tentukan fungsi kecil untuk setiap langkah dan gabungkan.
  • Definisi ulang yang rusak mempertahankan versi lama. Jika definisi tip baru memiliki kesalahan, baris tersebut menunjukkan kesalahan dan tip kerja sebelumnya tetap tersedia.
  • Jawaban dapat berubah saat catatan dihitung ulang. Panggilan dilakukan lagi setiap kali, sehingga fungsi yang menggunakan random atau tanggal hari ini dapat memberikan jawaban baru.
  • Kesalahan diteruskan ke hasil. Jika argumen membuat rumus gagal, misalnya karena pembagian dengan nol, pemanggilan menampilkan kesalahan tersebut.

Batasan

Apa Batas
Parameter per fungsi 32
Panggilan bersarang (fungsi yang memanggil dirinya sendiri atau yang lain) 12
Panggilan yang dilakukan saat mengerjakan satu panggilan tingkat atas 16,384
Fungsi yang didefinisikan dalam sebuah catatan 1,024

Mencapai batas menunjukkan Error: calculation limit. Sisa catatan terus berfungsi. Lihat Kesalahan, diagnostik, dan batasan untuk setiap batasan.

Menggabungkan semuanya

Berikut contoh faktur pekerja lepas. Tarif dan PPN didefinisikan sebagai variabel di bagian atas, lalu tiga fungsi kecil melakukan perhitungannya:

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) menghasilkan £3,600.00
build = fee(4.5) menghasilkan £2,025.00
subtotal = design + build menghasilkan £5,625.00
with_vat(subtotal) menghasilkan £6,750.00
late_fee(with_vat(subtotal), 45) menghasilkan £135.00

Ubah day_rate atau vat dan setiap baris di bawah ini diperbarui. Ketika klien terlambat membayar, satu panggilan menambah biaya.