急ですが、言語の学習をする事になりました。
わたくしperlの学習を途中で投げ出した経験があります。
あ、ちなみにCOO失格で何か生産的な事をしろって虐められているわけではありませぬ。例えばバースト的に増えた受注案件をこなすための技術者の募集を行う役目であるわたくしが、募集をさぼっていたかは置いておいて、技術者不足の際に「人財が集まるまではわたくしがその開発をやります」と言えたとする。
これは個人的には目茶苦茶、もうハチャメチャ格好良い事なんですね。
また一歩問題解決力がつくわけです。最高ですね♪
と、言うわけで、当社のマルチレイヤーオールラウンダーである横浜先生から一回30分の稽古を10回つけてもらう事になりました。
前提
・Rubyが動く環境は準備されています
・ターミナルソフトの扱いに抵抗がありません
・UNIX系OSのごく初歩的なコマンドは知っています
・もの覚えは悪い方です
今回のセット
・rubyはインタプリタ言語
・Rubyのファイルの先頭に書く文字(ファイルを実行するプログラムの場所と名前)
・当社の簡単なコーディング規約
・Rubyファイルの拡張子
・数値演算子(+、-、*、/、%)とprintコマンドによる計算結果と文字列の出力方法
・クラスとメソッド、オブジェクト、インスタンスについて
はじまりはじまり~
・rubyはインタプリタ言語
rubyは人間が分りやすい言葉で書いて実行するだけで動く優れもの、らしいです。きっと機械が分りやすい言葉で書くほうが機械も処理が楽なんだろうけどそこは置いておきます。
・Rubyのファイルの先頭に書く文字(ファイルを実行するプログラムの場所と名前)
Rubyのファイルの中身はというか、後に調べた事ですが、UNIX系のシステムでは、
ファイルの一行目に、
#!
の後に続けて書くプログラムでそのファイルの処理を行うという決まりがあるとの事で、当社の環境を伝える事は多分悪い事なんじゃないかと思うので書きませんが、
#!/xxx/xxx/xxx/ruby
のように書いてあげると、このファイルに書いた後のプログラムは/xxx/xxx/xxx/rubyで実行されるわけですね。
・当社の簡単なコーディング規約
1.単語と単語は”_”(顔文字じゃないですよ。アンダーバー)でつなぐ
1.インデントは半角スペース2個分(タブは禁止)
1.文字コードはUTF-8かUTF-8(CJK)
1.todoの書き方は”#TODO:内容”とする(”は含めない)
1.数値演算子との間はスペースを空ける
・Rubyファイルの拡張子
windowsばかり使っているわたくしですが、拡張子くらい知っています。エクセルだったら.xls、ワードだったら.docのそんな感じの決まりですよね。でもなんで拡張子を指定しているくせにファイルの一行目にrubyプログラムのある場所を書かなきゃいけないんでしょ?ま、いっか。知らなくても平気そう。そういえば、一行目に書かなかったらファイルを実行する時に
$ruby ファイル名
ってしなくちゃいけないとか言ってたな。ま、守っていれば知らなくても平気そう。
・数値演算子(+、-、*、/、%)とprintコマンドによる結果出力の方法
来ました。UNIX系システムではまず”Hello World!”を表示させるのが決まりのようです。perlの学習の時にもやりましたね。簡単簡単。
$vi hello_world.rb
#!/xxx/xxx/xxx/ruby
print “Hello World!\n”
って書いてあげてファイルを閉じる。
さて作ったファイルを実行。
$./hello_world.rb
Hello World!
$
よし、表示できた♪
「Hello Worldに続けて文字列をくっつけてみて」
rubyでは結合は”+”って言ってたのをどこかで聞いたぞ。
$vi hello_world.rb
#!/xxx/xxx/xxx/ruby
print “Hello World!”+”hogehoge\n”
さて、実行と
$./hello_world.rb
Hello World!hogehoge
$
よしOK
「次は数字の計算をやってみて」
$vi hello_world.rb
#!/xxx/xxx/xxx/ruby
print “Hello World!” + “hogehoge\n”
print 1*5 #1かける5ね
print “\n”
print 2+3 #そのまま
print “\n”
print 8%3 #8わる3のあまりがわかります
print “\n”
print 8-4 #そのまま
print “\n”
実行と、
$ ./hello_world.rb
Hello World!hogehoge
5
5
2
4
$
よし!
「じゃ、数字の結果の後に文字列をつなげてみて」
$vi hello_world.rb
#!/xxx/xxx/xxx/ruby
print “Hello World!” + “hogehoge\n”
print 1*5
print “\n”
print 2+3
print “\n”
print 8%3
print “\n”
print 8-4
print “\n”
print (1*5).to_s + “hoge\n”
実行
$ ./hello_world.rb
Hello World!hogehoge
5
5
2
4
5hoge
出来た。で、ここ本当は詰まりました。一人だったら早くも挫折です。本来であれば、数字である1*5の結果と文字列のhogeは足す事が出来ないんです。なぜなら属性というか、クラスが違うからなんです。
例を示すなら、数字の場合”1+5=6″ですが、文字列の場合”格好良い+格好悪い=男前”にはならないからなんです。わかりにくいですね?わかりにくいのですが、でも「クラスって何よ?」と「print (1*5).to_s + “hoge\n”ってどういう意味よ?」という疑問を抱えたまま次に行きます。
・クラスとメソッドとオブジェクト、インスタンスについて
先のセット項目で数字と文字をつなげる作業をしました。で、普通に文字列と文字列をつなぐように書くとどんなエラーが出るかは自分で試してもらうとして、
print (1*5) + “hoge\n”
これは実行出来ないのです。
で、出てきたのが
print (1*5).to_s + “hoge\n”
これです。rubyではカッコに囲まれたところの処理を優先するみたいです。(1+5*(2+3))だったら2+3にかける5をして1を足すから、、、いくつだろう?まいっか、になるわけですね。
1*5を計算した物を”.to_s”してあげる事で数字の5から文字の5にしてあげたわけです。なので、文字の5とhogeをくっつけると、”5hoge”となるわけです。「”.to_s”してあげる」といいましたがココでクラスとやらの概念が出てくる模様。
クラスというのは横浜先生は設計図であると教えてくれたのですが、僕は上に書いたように属性として捉えています。数字は数字クラスに属するので、足し算をすると足された結果の数字になる。文字列は文字列クラスに属するので、足し算(結合)をするとただの続き文字になる。で数字の5と文字列のhogeは足すことが出来なかったわけです。そもそも数字クラスの中では数字クラスに属する数字と数字を+の記号でつなぐ事でどのように処理するのか書いてあって(数字クラスの+メソッド)、文字列クラスの中では文字と文字を+の記号でつなぐ事でどのように処理するのか(文字列クラスの+メソッド)書いてあって、同じ+でもどう処理するか分らないんじゃないでしょうかね?そういうエラーだと思っています。
で、例の”.to_sしてあげる”ですが、これは数字クラスという物を定義しているファイルの中に書いてあるメソッドというものなのだそうです。数字クラスのファイルを覗くと「to_s」っていう処理について、「数字を文字にする」って書いてあるそうな。これがメソッドです。クラスに属するものの処理一つ一つがメソッドであるととりあえず理解しました。
さて、残るはインスタンスとオブジェクトですね。
クラスから話をしましょう。
クラスは属性です。ここでは生き物クラスについて想像を巡らせます。
生き物、と言われて何を想像するでしょうか?活動をして子孫を残す物はみんな生き物ですね?
その概念がクラスとよばれるものらしいです。生き物の中の値(パラメータ)を選ぶ事で、例えば生き物の動物(植物があるから)で、両生類で、日本に居て、4本足で、尻尾が無くて、幼生の時の名前はおたまじゃくしで、とかの値を選ぶ事で、オブジェクト(実態)である”カエル”が思い浮かぶわけです。クラスの値に具体的な物、または空の値が入ったものをオブジェクトというわけですね。
で、インスタンスというのは、「クラスをインスタンス化するとオブジェクトになる」と言う風に使うそうで、実際のまたは空の値をクラスに与える事でオブジェクトを作り出す行為の事を言うそうです。
今日はここまで!

