ミュータブルとイミュータブル

こんにちは!kossyです!




本日気になったニュースはこちら
news.yahoo.co.jp

そこまでやるか、って感じですね、、、
インターネットや検索エンジンが人々の生活を豊かにしたのは間違いないですし、
規制の深化でテクノロジーの進歩が阻害されるようなことがあってはいけないと思ってます。











プログラミングを学んでいると、毎日必ず知らない単語に出会うのですが、
今日もご多聞に漏れずミュータブルとイミュータブルという単語に出会ってしまいました。

今回はミュータブルとイミュータブルとはなんぞや、ということで
ブログに残しておこうかと思います。



ミュータブルとは?

英語で書くとmutableって書くみたいですね。
bleで語尾が終わっていると(availableとかvariableとか)、「〜できる」とか「〜しやすい」って意味になります。
mutableも他のbleで終わる単語と同様に、「可変の」とか、「変更可能な」等の意味を持っています。

プログラミングの世界では、「破壊的な変更ができる」という意味で使われているみたいです。
Rubyで言うと!マークが付いているメソッドが適用できるってことですね。

例えば、Stringクラスはデフォルトでミュータブルなので、!が付いたメソッドを乱用していると、
意図せずバグを起こすということが起き得ます。

イミュータブルとは?

英語って(と言うか言語って)便利で、一つ単語を覚えてしまうと、
覚えようと思えば対義語や類義語、活用形なんかもすんなり覚えられちゃいます。

イミュータブル(immutable)もmutableと対を成しており、
「不変な」とか「変更不可の」等の訳し方をするみたいです。



余談ですが、im-とかin-で始まる単語は基本的に否定の接頭辞として使われてまして、例えば、
「immposible(不可能)」とか、incredible(信じられない)とかです。

immposibleの対義語はpossibleで、incredibleはcredibleですね。ちなみにcredibleの名詞形はcredit(信用)です。
こんな感じで一つ単語を覚えてしまうと枝のように広がることができるのが面白いですね。



話が逸れてしまいました。
プログラミングの世界では、immutableのことを、「破壊的変更が適用できない」という意味で用いられるみたいです。

Rubyではimmutableなクラスや値がいくつかあって、
・IntegerやFloat
・Symbol
・True/FlaseClass
Nil
等が有ります。



まぁ、「ミュータブルだから〜」とか言われたら、
「あぁ、ここの値変更できるのね」

「イミュータブルだから〜」だったら、
「変更できないのね、freezeすんのかな」

とか思っとけば良さそうです。