御参拝、誠に有難う御座います。住職(管理人)の修羅観音です。
Rubyで仏教プログラミング、ある程度まとまったところまで書き終えてから、PHPや他の言語を一旦観て回り、現在は、またRubyとRuby on Railsに戻ってきております。
他の言語も一旦観て回り、また、ProgeteにあるSQL等も学んでから、Rubyに戻ってきたのですが。
他の言語との共通点や差異を学ぶ事で、よりRubyを学び進める事が出来たような気もしております今日この頃。
また、Progateも何周かして繰り返し理解しながら学ぶようにしているために、徐々になんとか掴めてきた感触も御座います。
やはり、実際に手を動かしながら、指を動かしながら繰り返す事が肝要であると、改めて気づく事に御座ります。
勤行の如く、毎日御経さんと出会わせて頂くかの如く。
ただ、仏事にもせっせと関わり、黙々とRubyとRuby on Railsを独学しておったためか、この寺院(ブログ)でのRubyで仏教プログラミングが、疎かになっておりました。
ここで一旦、Progateを何周かして、「作りながら学ぶRuby入門第2版」や、その他の本でせっせと学び実践してきた事を、備忘録的に記録してみることと致します。
久々のRubyで仏教プログラミング。
Contents
Rubyで仏教プログラミング:クラスを作る
久々のRubyで仏教プログラミング、今回は、「クラス」について学ぶ事と致しましょう。「クラス」は、Rubyに限らず、java等他のプログラミング言語でも学ぶ事となります、重要な事柄に御座います。
私、この「クラス」について、実は結構骨が折れたと言いますか、きちんといちいち理解しながら進めてみると、時間がかかってしまいまして。
Progateや本を何度も行き来して、やっとこさ、こういう感じかなあ、というところまで掴めた感触が御座います。
そういうわけで、復習と備忘録も兼ねて、きちんと理解しているかのテストも兼ねて、今回はRubyの「クラス」について、学ぶ事と致します。
クラスとは何ぞや?
これから、Rubyにてクラスを作っていくわけですが。何はともあれ、「そもそも、クラスとはなんぞや?」という話からせんといけませんね。
「クラス」とは、よくある説明が「設計図」という説明の仕方です。
また、「クラス」と言う事を、学校などである「何何組」のように、学校の1クラスであったり、大学の何何ゼミという説明をされる人もいらっしゃいます。
私は、この学校や学校の1クラスの例えで、「ああ、なるほどなあ」と思いました。
例えば、私が卒業した大学にちなんで、「ドラゴン大学」と致しましょうか。
この「ドラゴン大学」という大きな枠組みが、「クラス」の事です。
そして、大学(設計図)から生成される具体的なものを「インスタンス」と呼びます。(インスタンスとは「実体」の事です。)
例えば、大学で作られた研究論文を、インスタンスと見立てて宜しいかと存じます。
この場合、「ドラゴン大学から研究論文というインスタンスが生成された」という事ですね。(大雑把すぎる解説ではありますが。)

例題的に「DoragonUniversityクラス」から「インスタンス(論文)」を生成してみる。
百聞は一見にしかず、実際にコードを書いて書き方を覚えつつ、動かしてみましょう。今回は、ドラゴン大学という事で、「DoragonUniversityクラス」を作って、そこから研究論文というインスタンスを生成します。
まず、クラスを定義するところから始めるのですが、クラスの定義をする時、次のように書きます。

これで、「DoragonUniversityクラス」というクラスが定義できました。
クラスはこれで定義できましたが、中身はまだ何もありません。
このクラスの中では、大学で勉強するために使える機能がある学舎や図書館などのようなものを定義する事が出来ます。
そういった機能があるものは、defを使って定義していくことが出来ますが、これを「インスタンスメソッド」と言います。
硬い言い回しですと、「インスタンスに対して呼び出す事が出来る、クラスの中で定義したメソッド」のことです。
では、DoragonUniversityクラスの中に、メソッドを定義してみましょう。
メソッドの定義の仕方は、以前のRubyで仏教プログラミングでやりましたね。
参照記事:「Rubyで仏教プログラミング|defを使ってメソッドを定義する」
今回は「def thesis」としましょうか。(thesisは論文という意味の英単語)

これで、インスタンスを生成したときに使えるthesisメソッドが、DoragonUniversityクラスの中に出来上がりました。
では、クラスという設計図を元にインスタンスを生成、今回の例でしたら、大学という大枠を元にして論文インスタンスを生成しましょう。
インスタンスの生成は、「クラス名.new」で出来ます。
また、「変数名 = クラス名.new」とすれば、インスタンス変数を変数に代入できて、何かと便利に使えます。
今回は、「ronbun」という変数に、生成したインスタンスを代入します。
こうしてクラスから生成されたインスタンスは、インスタンスメソッドを使う事が出来ます。
ゆえに、生成されたインスタンスが代入された「ronbun」という変数に、「.メソッド名」とする事で、定義したメソッドを呼び出せます。
それでは、やってみましょうか。

これが、コードの全体でありまして、これを実行すると、以下のように出力されます。

これが、クラスの基本的な事柄です。
かなり大雑把な説明ではありましたが、「classでクラス定義する時は、頭文字は大文字で」「endで閉じる」で、クラスを定義する事が出来ます。
Rubyで仏教プログラミング:浄土仏教の宗派をクラスとインスタンスメソッドを使って表示する
それでは、Rubyで仏教プログラミング、プログラミングを学びながら、仏教にも触れる事に致しましょう。今回は、日本の浄土仏教について触れてみることと致します。
浄土仏教と言えば、私が存じております日本仏教における浄土仏教は、浄土宗・浄土真宗・時宗・融通念仏宗です。
これをそれぞれ、生成されたインスタンスを使って表示させていくことに致しましょう。
まずは、classの定義からですね。
今回は、「class JodoBuddhism」という名前でクラスを定義致します。
classを定義する際、最後に「end」を付け忘れないように注意しましょう。
クラスの定義が出来たら、次に「class JodoBuddhism」と「end」の間に、defを使ってインスタンスメソッドをこしらえていきます。
今回は、「jodo」「jodo_shin」「jisyu」「yudunenbutsu」と、それぞれをローマ字にした名前にしていきます。
宗派は「school」で表せるのですが、今回はそこには拘らずに定義していくことに致します。
そして、それぞれのメソッドは、呼び出したら「何何宗です」と表示される出力プログラムを、defとendの間に書いていきます。
今回は、「puts “浄土宗です”」という感じで、簡単なものにしておきましょう。
ここまで出来たら、次はインスタンスを生成してメソッドを呼び出す、という部分ですね。
インスタンスの生成は、「変数名 = クラス名.new」です。
ここでは「jodo」という変数に、クラス名.newを代入します。
こうすることで、変数に「.メソッド名」をくっつけることで、クラスの中で定義したメソッドを呼び出すことが出来ます。
例えば、j「jodo.jodo」で、JodoBuddhismの中で定義したjodoメソッドを呼び出すことが出来ます。
ここまでの事をせっせと書き、完成したものが、こちらの画像の通りです。

これを実行すると、次のように出力されます。

実際にコードを書かれて、動くことを確認されたら、色々と弄ってみて、どこがどのように動くかを確認されると、宜しいかと存じます。
例えば、jodoメソッドの間に、「puts “法然上人”」というように、宗祖の名前を追加したり。
その場合、「時宗は誰が宗祖だったかな」という場合は、調べて「ああ、一遍上人か」と、仏教の勉強にもなりましょう。
ちなみに、以前も登場して頂いた祖師方と宗派の名前ではありますが、ここでもう一度復習として、お伝えしておきます。
浄土宗は法然上人です。
真宗・浄土真宗は親鸞聖人です。
時宗は一遍上人です。
融通念仏宗は良忍上人です。
ここで仏教の勉強をもう少し。
私、融通念仏宗の事については不勉強でありまして、よく知らないのですが、昔少し調べたり触れた時の情報をお伝えするならば。
融通念仏宗の総本山は、大阪に御座います「大念仏寺」とのことです。
大念仏寺さんのウェブサイトにて、良忍上人についての事を学べますから、今回の御縁を機に、学ばれるのも宜しかろうと存じます。
また、良忍上人と京都の御縁は、20代前半の頃に、京都大原におわしましたとか。
更に付け加えますと、声明(しょうみょう)の歴史を辿ると、良忍上人にも触れる事となりましょう。

プログラミングにおいて、クラスは避けて通れない
今回は、Rubyでもよく書く事になる、クラスについて共に学んで参りました。上述した通り、クラスはRubyに限らず、プログラミングを学ぶ上では、避けては通れない事柄に御座います。
どんどんとクラスについて学び実践していくに連れて、難しくなってくると言う事は、Progateや本で学び実践し続けて、私も体験した事です。
それでも何とか食らいついて、Progateや本を何周もして、やっとこさ、初歩の初歩を言語化する事に挑戦するに至ったのですがね。
もっとも、上手く言語化出来ているかどうか、怪しいものではありますが。
今回のクラスと、インスタンスメソッドの話は、ProgateやRubyの本と共に復習して頂き、また、以前のRubyで仏教プログラミングも併せて読まれると、より理解が深まって行く事でありましょう。
参照記事:「Rubyで仏教プログラミング総集編|まとめページ」
私も、まだまだこれから学び実践していく事に御座ります。
プログラミング、RubyとRuby on Railsだけではなく、仏教も。
合掌、礼拝