var immutable
বনাম val mutable
এই প্রশ্নের অনেক দুর্দান্ত উত্তর ছাড়াও। এখানে একটি সাধারণ উদাহরণ, যা এর সম্ভাব্য বিপদগুলি তুলে ধরে val mutable
:
পরিবর্তনীয় অবজেক্টগুলি পদ্ধতির অভ্যন্তরে পরিবর্তিত হতে পারে, যা সেগুলি প্যারামিটার হিসাবে গ্রহণ করে, যখন পুনরায় নিয়োগের অনুমতি নেই।
import scala.collection.mutable.ArrayBuffer
object MyObject {
def main(args: Array[String]) {
val a = ArrayBuffer(1,2,3,4)
silly(a)
println(a)
}
def silly(a: ArrayBuffer[Int]): Unit = {
a += 10
println(s"length: ${a.length}")
}
}
ফলাফল:
length: 5
ArrayBuffer(1, 2, 3, 4, 10)
এরকম কিছু ঘটতে পারে না var immutable
, কারণ পুনরায় নিয়োগের অনুমতি নেই:
object MyObject {
def main(args: Array[String]) {
var v = Vector(1,2,3,4)
silly(v)
println(v)
}
def silly(v: Vector[Int]): Unit = {
v = v :+ 10
println(s"length of v: ${v.length}")
}
}
ফলাফল স্বরূপ:
error: reassignment to val
যেহেতু ফাংশন প্যারামিটারগুলি val
পুনরায় নিয়োগের অনুমতি দেওয়া হয় না বলে চিকিত্সা করা হয়।