こんにちは!石田佳介です!
今回の記事では、RoR初心者が中級者になるために絶対に抑えておかなければならないことを記事にします。
それは、オブジェクト、インスタンス、インスタンス変数、クラス
この4つを人に説明できるようになるくらい理解していないと絶対に更なる高みにはいけません。
それはなぜか?理由は、めちゃくちゃ大事な基礎であり、RoRの根幹になるものだからです。いくら多くのメソッドをおぼえても、上の4つを完璧に理解していなければ、実務に入ってもいつか頭打ちがきます。
こんな言っている僕ですが、ぼくも最近理解したので、心配しないでくださいね(笑)
今回使用する言語はrubyを使うので、ご了承ください
それでは本題に入りましょう
そもそもオブジェクトって?
この言葉よく聞くとおもいますが、そんな難しいことを言っているわけではありません。よく「モノ」と表現されます。現実世界でイメージしてみるとよく分かると思いますが、世の中には、モノであるあふれてますよね。スマホ、パソコン、本、等々あげたらキリがありません。
それはわかったけど、プログラミングの話をしてくれよ!っていうツッコミが出てくるとおもうので、もう少しプログラミングチックな話にしていきましょう
実際にターミナルに打って確かめる
rubyをインストールしている方は、コマンドで
irb
と入力すると、コンソールが開きます。
まずは、簡単なオブジェクトからいきましょう。その一つが文字列です。文字列とは簡単にいうと、人間が普通にしゃべっている言葉のことです。
コマンドで、山田太郎と入力すると
"山田太郎"
=> "山田太郎"
と出力されます。ここで、僕らと、コマンドの間でどういう会話が生まれたかというと、
僕ら:山田太郎というオブジェクトを作って、ここに置いておくね!ターミナル:山田太郎というオブジェクトを作って、ここに置いておくのね!おっけ!
というような会話が生まれています。この会話によって、「山田太郎」というモノが作られたわけです。*(誤解を招かないようにいうと、ターミナルじゃないと、オブジェクトが作られないわけじゃないです。)
要は何を言いたいかというと、rubyはあらゆる文字や数字がモノ、つまりオブジェクトとして扱われるよ!ということなんです。このようにあらゆるものがオブジェクトとして扱われ、使われることをオブジェクト指向といいます。でも、皆さんのなかには、「石田よ、言ってることは分かった。でも、あらゆるものがオブジェクトになると何がいいの?」って思う人が多いとおもいます。ここで理解しなければいけないのが、インスタンス変数というものです。変数というものは、プログラミング勉強していたら分かるとおもいますが、インスタンスというものは中々理解されないところだとおもいます。そして、インスタンスというものを理解するためには、クラスというものを理解しなければいけません。
クラスとインスタンス
まず、クラスとは設計書とよくいわれれます。現実世界でイメージしてみましょう。たとえば、家を作るための設計書があるとします
この設計書をもとに、あらゆる家を作っていきます。たとえば、洋風な家、和風な家、お城みたいな家などなどできるわけです。このように洋風な家、和風な家、お城みたいな家それぞれをインスタンスと呼ぶわけです。洋風な家もインスタンス、和風な家もインスタンス、お城みたいな家もインスタンスになるんです。インスタンスを和訳すると、「実物」となるので和訳もぴったりですね。
では、プログラミングの話で考えてみましょう。Userというクラスがあるとします。そこでこんなようなコードを打ってみましょう
User.create(name: “John”, email: “John@example.com”)
(モデルにこのカラムがあると仮定しています)このようにすると、Userというクラス(設計書)から、
nameがJohnでemailがJohn@example.comという具体的なモノ、つまりインスタンスができるわけです
長くなりましたが、インスタンスとはこのようの具体的なモノなんですでは話は戻ってインスタンス変数とは何か。ここまでついてこれた方は何となくわかるとおもいます今まで見てきたような具体的なモノ、つまりインスタンスが格納されている変数、それがインスタンス変数なんです。そしてインスタンス変数はそのインスタンス固有の変数です
オブジェクト指向とは?
オブジェクト指向の話に戻ります。これまでの話を総括すれば、オブジェクト指向のメリットは分かるとおもいます。これまでの話で、クラス、インスタンス、そしてインスタンス変数を説明しました。そしてこれらって、どこでも使いまわせるんですね。クラスでいえば、継承(これも非常に重要な概念なので、また記事にします。)、インスタンスであれば、具体的なものを変数に渡すインスタンス変数。
オブジェクト指向の最大のメリットはこれですね。(ほかにもメリットはありますが。)
逆に使いまわしができないとどれくらいめんどくさいかっていうと、思い浮かべてほしいのが、ターミナルですね
あれって、全く使いまわしができないじゃないですか。100回前にかいたあの長い記述を呼び出したい時に、それをまた書かなきゃいけない。マジだるいですね
それを楽にしてくれるのがオブジェクト指向っていうものなんです。
なんとなくわかってくれましたかね?この記事を読んで、少しでもオブジェクト指向を分かってくれた人がいたらうれしいです!ありがとうございました!ここ間違っているよ!とかあったら、遠慮なくコメントしてくださいね!この記事では、プログラミングに関すること、技術系をメインに発信しています。Twitterフォローもお願いします!