#6 変数

変数

数学をやっていた人にはおなじみの変数。こういうやつです

x <- 1

代入なんて知らないよ!!という数学やってなかった人もいるでしょうから、こちらも。

x = 2y

この場合のxy変数です。

だいたい数学の変数って計算で求める対象なので代入するということはあまりありませんけれど、基本的な考え方は同じです。 例えば

x = 2y
y = 70 - 10

だとすると、最終的に求めたいのはxだと思うのですが、別にそれなら

x = 2 × ( 70 - 10 )

と書いてもいいわけです。 ではなぜそうしないかと言えば、70 - 10という計算の結果で求められるものに対してyという名前をつけたいわけですね。 これが

x = 2y
z = 2x + 3y
y = 70 - 10

なんてことになるとyは2回使う必要がありますから、名前があったほうが便利です。 これはほとんどプログラミングで使えるもので、

y = 70 - 10

というのは、ちゃんとRubyのコードになっています。 これを利用して

y = 70 - 10
puts y + y

とやればちゃんと120と表示されます。

変数に入るもの

数学だったら変数に入るのは基本的に数なんですが、プログラミングだと数値しか入らないわけではありません。 たとえば

x = "Hello"

なんてこともできます。

Perlの場合、変数は3種類あります。

  • スカラー変数
  • リスト変数
  • ハッシュ

リスト変数スカラー変数を複数並べたもの1で、ハッシュはちょっとまた特別なものです。

スカラー変数に入るのは

  • 文字列
  • 数値
  • リファレンス

の3種類です。 「リファレンスってなに!?!?」って感じでしょうけど、もうちょっと後に出てきますからお楽しみに2

JavaScriptだと変数に種類はなくて、入れることができるのは

  • オブジェクト
  • 論理値

の2種類です。そして、Rubyになると、変数に入るのはオブジェクトだけです。

文字列とか数値は入らないの!?」って思いますよね。JavaScriptやRubyでは文字列数値もオブジェクトという扱いになっていて、もっと複雑なナニカと同じ扱いをするようになっています。

変数につけられる名前

Perlの変数名はまず変数の種類を表す文字として、スカラー変数なら$, リスト変数なら@, ハッシュなら%をつけ、続いてアルファベットまたはアンダースコアが続き、 その後アルファベット、数字、アンダースコアからなる名前をつけることができます。

$boy
$Mother
$_The_Genius

Rubyの変数名はアルファベット小文字またはアンダースコアではじまり、アルファベットと数字、そしてアンダースコアからなると決まっています。

girl
myDog
great_brother1

JavaScriptの場合はUnicode文字を使用することができるため、「特別禁止されていなければなんでもあり」です。 ASCII記号で使用できるものは_$に制限されており、また先頭には数字は使用できません。それから、予約語を使うこともできません。

Material
名前
$$_100_ゴールド_$$

もっとも処理系がまちまちであることを考えれば、JavaScriptでも他の言語と同じような規則で名前をつけたほうが安全ですし、そもそもそのほうが読みやすいです。

Perl, Ruby, JavaScriptいずれでも大文字小文字は区別されます。例えばnamenAmeは別の変数です。

変数名の付け方

後の混乱を呼ばないために「ちゃんとわかる名前をつけましょう」。

例えば

a
b
c

よりは

name
father_name
mother_name

みたいにつけたほうがわかりやすくて良い名前です。 ただし、一時的に値を格納するためだけの変数3に関してはより短いものを使用します。 順序を数えるだけのものや、単純なイテレータ4iから、内容を伴った値の場合はxからはじめることが多く、 ハッシュのイテレータの場合はキーと値の2つが同時に入るためkv(keyとvalueの頭文字)を使用するのが一般的です。

Rubyの場合ファイルオブジェクトにおいて(主にFile.openのブロックとして)fを使うのも一般的な慣例です。

ary.each {|i| ... }
hash.each {|k,v| ... }
File.open("Somefile") {|f| f.gets }
numbers.inject {|sum, n| sum + n }

  1. といいつつ、0個以上並べたものだったりしますが↩︎

  2. 割と難易度高い部分なので楽しくないかもしれませんが。↩︎

  3. 主にイテレータ変数と呼ばれるもののことです。↩︎

  4. イテレータとはなにか、ということは後ほど登場します。↩︎