コードはimmutableに、人生はmutableに

immutableなコード

プログラミング用語に、mutable , immutable というものがあります。

mutable

・変えられる、変更可能な

immutable

・変えられない、不変な

Kotlinという言語を使って説明します。

fun main(){
  val days = listOf("月","火","水","木","金")
  println(days)
}
// 出力
["月","火","水","木","金"]

KotlinではlistOf()でリストを作り、その中に要素を入れることができます。この要素は宣言時のみ追加することができ、宣言後は追加したり、削除することができません。

days.add("新曜日")  // ←はできない


要素に追加、削除ができないのは不便に思うかもしれませんが、コード上ではとても安全です。
コードが膨大になってくると、変更可能なものに意図せず要素が追加されて、思わぬ動作を生みかねません。いつでも追加ができる・削除ができるということは、裏を返すと、予期せぬ所でいつでも追加できてしまう、削除できてしまうということでもあります。コードの保守性を高める上で、変更不能というものは、安全性につながると考えることができるのです。

mutableな人生

人生において、mutableはとても大事だと思います。mutableは、変えられる、変更可能なの通り、柔軟であるからです。

例えばKotlinでは mutableListOfで要素の追加可能なリストを作ることができます。
使い方としてはこんな感じです。

fun main() {
    val fruitsList = mutableListOf<String>()
    // 果物入れる前
    println("何も持ってないList:${fruitsList}")
    // 果物入れた後
    fruitsList.addAll(listOf("Apple","Orange","Banana"))
    println("果物追加したあとのList:${fruitsList}")
}

// 出力結果
何も持ってないList:[]
果物追加したあとのList:[Apple, Orange, Banana]

mutableListの使いどころは、初期に宣言だけしておいて、後に要素を追加したい場合です。addメソッドやaddAllメソッドを使用すれば追加ができますし、removeメソッドやremoveAllメソッドを使えば逆に要素を削除できます。

自分のスキルはいつでも、何でも追加できます。自分の好きなタイミングで、いろんなことに挑戦し、自分のやれること(mySkillsの要素の中身)の幅を広げていきたいです。

val mySkills = mutableListOf<String>()
mySkills.add("料理")
mySkills.add("DIY")


一方、人間の脳にはキャパシティがあり、詰め込んだ知識や苦い記憶のように、都度忘れたいもの、忘れるべきものもあります。もし、人生の中の記憶がimmutable(変更不能)であれば、忘れたいことも忘れられないですね、、

mutableであれば、たとえ悲しいことがあったとしても、

val myMemory = mutableListOf<String>()
myMemory.AddAll(listOf("悲しかったことA","悲しかったことB","嬉しかったことA","嬉しかったことB"))


そんなときはremoveで消してしまいましょう

myMemory.remove("悲しかったことB")
println(myMemory)
// 出力結果
["悲しかったことA","嬉しかったことA","嬉しかったことB",]


おしまい