Dalam matematika, sebuah variabel berarti Anda dapat memasukkan angka apa pun di sana, dan sebuah persamaan akan tetap benar:
root(square(x)) = abs(x)
Dalam bahasa pemrograman, ini tidak begitu: var bisa berubah. Dengan Python:
y = (x**2)**.5
x *= 2
assert y == abs(x)
akan memunculkan eksepsi, karena x pada baris terakhir tidak sama.
Apakah ada bahasa pemrograman yang menggunakan variabel tidak berubah?
Jawaban:
Untuk menjawab pertanyaan judul Anda "Apakah bahasa pemrograman menggunakan variabel seperti dalam matematika?": C, C #, Java, C ++, dan variabel bahasa gaya C lainnya menggunakan cara mereka digunakan dalam matematika.
Anda hanya perlu menggunakan == alih-alih =.
Jika saya mengambil asli Anda
Kemudian saya bisa menerjemahkannya ke dalam C # secara langsung tanpa ada perubahan selain dari sintaks.
Math.Sqrt(Math.Pow(x,2)) == Math.Abs(x)
Ini akan mengevaluasi true untuk setiap nilai x selama x kuadrat kurang dari maks untuk tipe data yang Anda gunakan. (Java akan sangat mirip, tapi saya percaya namespace Matematika agak berbeda)
Bit berikutnya ini akan gagal dikompilasi dalam C # karena kompiler cukup pintar untuk mengetahui saya tidak dapat menetapkan kembalinya satu operasi ke operasi lain.
Math.Sqrt(Math.Pow(x,2)) = Math.Abs(x)
Kekekalan tidak ada hubungannya dengan ini. Anda masih perlu menetapkan nilai dalam bahasa yang tidak dapat diubah dan sangat mungkin bahwa bahasa yang diberikan dapat memilih untuk melakukan ini dengan menggunakan = sebagai operator.
Lebih lanjut membuktikan poinnya, loop ini akan berjalan sampai Anda menghabiskan nilai hukum x dan mendapatkan pengecualian overflow:
Inilah sebabnya mengapa ahli matematika membenci penggunaan = untuk tugas. Itu membingungkan mereka. Saya pikir ini telah membuat Anda bingung sendiri. Ambillah contoh Anda
Ketika saya mengubah ini menjadi aljabar, saya mendapatkan ini:
abs (2x) = root (x ^ 2)
Yang tentu saja tidak benar untuk nilai selain 0. Ketidakmampuan hanya menyelamatkan Anda dari kesalahan mengubah nilai x ketika Anda menambahkan langkah-langkah tambahan antara mengevaluasi Sisi Kiri dan Sisi Kanan dari persamaan asli. Sebenarnya tidak mengubah cara Anda mengevaluasi ekspresi.
sumber
Bahasa pemrograman yang murni fungsional, seperti Haskell , menegakkan variabel yang tidak dapat diubah. Saya suka menyebutnya pengidentifikasi, bukan variabel.
sumber
The
=
tanda yang digunakan dalam bahasa pemrograman menyesatkan.<-
, yang berarti "toko", atau bahkan COBOLMOVE
harus digunakan sebagai gantinya.Sebagai tambahan, Prolog menggunakan variabel seperti matematika: Variabel tidak dapat berubah, dan mesin Prolog akan mengisi variabel untuk melihat apakah solusinya ada.
Juga, Curry adalah campuran dari Haskell dan Prolog.
sumber
C, C ++, dan Objective-C dapat menentukan ketidakmampuan untuk argumen fungsi (dan metode), serta variabel lain (pengidentifikasi), dengan jenis kualifikasi "const".
sumber
Anda dapat mensimulasikan ketidakmampuan dalam Python juga dengan tidak mengizinkan pembaruan ke kelas. Seperti yang dinyatakan sebelumnya sebagian besar bahasa pemrograman fungsional murni memaksakan imutabilitas. Clojure adalah tambahan terbaru untuk platform JVM (Clojure adalah dialek LISP)
Dalam Scala (juga bahasa JVM ) pemersatu variabel dukungan OO dan FP yang dideklarasikan dengan
val
tidak dapat diubah. Ekspresifitas Scala dan dukungan hibrida OO / FP membuatnya terlihat mirip dengan Mathematica . ( Akka adalah kerangka kerja yang menambahkan fungsi Erlang OTP dan Clojure seperti STM .. ke Scala dan Java.) LACASA menambahkan sistem tipe dan model pemrograman untuk menegakkan disiplin kemampuan objek dalam Scala, dan untuk menyediakan referensi objek yang unik. ( kode ) ( latar belakang teoritis )Di Jawa, variabel yang dideklarasikan
final
tidak dapat diubah, dan perpustakaan Java seperti Google Guava menyertakan perpustakaan koleksi yang tidak dapat diubah. JavaString
juga selalu berubah.sumber