変数の種類を知っておこう!Rubyで変数のスコープを使う方法【初心者向け】
初心者向けにRubyの変数の種類、スコープについて解説しています。実際に書きながら使い方を説明しているので、変数のスコープについてよく分からないという方でも理解できるはずです。Ruby学習中の方はぜひご覧ください。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
Rubyで変数のスコープを使う方法について解説しています。
変数にもいくつか種類があるので、知っておくと今後役立つでしょう。
Rubyについてそもそもよく分からないという方は、Rubyとは何なのか解説した記事をまずご覧ください。
なお本記事は、TechAcademyのWebアプリケーションオンラインブートキャンプの内容をもとに紹介しています。
田島メンター!!変数のスコープというのは何ですか〜?
変数のスコープは、その変数を参照できる範囲のことを言うんだ。
スコープの外からは、参照することができないってことですか?
そうだね。ここではそれぞれの変数のスコープについて解説しよう。
目次
スコープとは
スコープは、変数の有効範囲の事です。スコープの外からは変数は見えないため、変数を参照できなくなっています。
そのスコープに対応するためにRubyには様々な変数が用意されています。
[PR] Rubyのプログラミングで挫折しない学習方法を動画で公開中
グローバル変数
グローバル変数はその名前の通りグローバルな変数です。スコープはプロジェクトの全ての範囲です。
そのため、プロジェクト内で一意であることが保証されている変数のみに使用されます。
思わぬ部分で変数名がかぶってしまいバグやエラーの原因ともなるので、使う場面はよく考えましょう。
$global = "global" def greet p $global end greet => “global”
実行してみると、文字列が出力されていることがわかります。
グローバル変数は全体で使用することができるんだ。
一番分かりやすいですね。
次はインスタンス変数・クラス変数・ローカル変数を見ていくよ。これらはそれぞれスコープが異なるのでよく覚えておこう。
インスタンス変数
インスタンス変数はインスタンス毎に値を持つ変数です。
スコープはインスタンス内ならどこでも参照することができます。
class User def initialize(name) @name = name end def put_name p @name end end user1 = User.new("taroo") user2 = User.new("hanako") user1.put_name => “taroo” user2.put_name => “hanako”
実行してみるとインスタンス毎に違った値が出力されていることがわかります。
インスタンス変数はRubyやRubyを使用したフレームワークのRuby on Railsで頻出する変数です。必ず理解しておくようにしましょう。
コスパとタイパ、両方結果的に良くなる良くなる学び方とは?
「スクールは高いし時間も縛られて効率が悪い」と考える方は多いと思います。
もちろん、時間も費用もかかることは間違いありません。
ただ
結果的に無駄な学びにお金も時間もかける方がリスクが高いという考えもあります。
コスパ・タイパ最適化の参考として、
テックアカデミー卒業生がスクールを選んだ理由
をご紹介します。
- ・困ったときに、質問や相談できる相手がいるため挫折しなかった
- ・プロとして必要なスキルのみを深く学べたので無駄がなかった
- ・副業案件の提供と納品までのサポートがあったので目的を達成できた
安価・短期間で広く浅く学んでも意味がありません。
本当に自分の目的が達成できるか、それが重要です。
自分にどのスキルや学び方が合っているか、どんな学習方法かなど、お気軽に
無料相談
に参加してみませんか?
カウンセラー・現役のプロへ、何でも気軽に無料相談可能。
30分か60分お好きな時間が選べて、かつ3回まで
すべて無料で
ご利用できます。
無理な勧誘は一切ない
ので、お気軽にご参加ください。
クラス変数
クラス変数はクラス内で一意に値を持つ変数です。スコープはクラス内です。
下のプログラムはインスタンス変数をクラス変数に変更したサンプルです。
class User def initialize(name) @@name = name end def put_name p @@name end end user1 = User.new("taroo") user2 = User.new("hanako") user1.put_name => “hanako” user2.put_name => ”hanako”
インスタンス変数と違いUserの名前がhanakoで上書きされていることがわかります。
クラス変数は思わぬ場面で上書きが起きたりすることもあるため、注意が必要です。
ローカル変数
ローカル変数は一番スコープが狭い変数です。
変数は定義されたメソッドのみです。
class User def initialize(name) local_name = name end def put_name p local_name end end user1 = User.new("taroo") user2 = User.new("hanako") user1.put_name user2.put_name
上のプログラムを実行すると、
`put_name’: undefined local variable or method `local_name’ for #<User:0x007fcfbb1735a8> (NameError)
というエラーが発生します。
「local_name」というローカル変数かメソッドが用意されていませんという意味です。
スコープ外から変数を参照したためこのようなエラーが発生します。
擬似変数
擬似変数は今までの変数と趣が違うものとなっています。
擬似変数には「true」,「false」,「nil」の三種類があります。
p(1==1) => true p(1==2) => false p(nil) => nil p(1==1) => true p(1==2) => false p(nil) => nil
trueは真、false、nilは偽を表します。
またnilは「何もない」状態を表します。falseとも0とも違う概念となっているため注意しましょう。
以上、Rubyにおける変数のスコープについて解説しました。
種類が多いので、実際に書きながら覚えていきましょう。
疑似変数はそれ自体に値を代入することができないものなので、ちょっと他とは違うね。ここでは参考程度に見ておくといいよ。
名前の前にインスタンス変数は@、クラス変数は@@が入るんですね。
そうだね。グローバル変数も$から始まるなどの決まりがあるので、表記を間違えないように気をつけよう。
分かりました。ありがとうございます!
[お知らせ]TechAcademyでは初心者でも最短4週間でオリジナルサービスが作れるRuby on Railsオンラインブートキャンプを開催しています。
プログラミングを独学で学習していて、このように感じた経験はないでしょうか?
- ・調べてもほしい情報が見つからない
- ・独学のスキルが実際の業務で通用するのか不安
- ・目標への学習プランがわからず、迷子になりそう
テックアカデミーでは、このような
学習に不安を抱えている方へ、マンツーマンで相談できる機会を無料で提供
しています。
30分間、オンラインでどんなことでも質問し放題です。
「受けてよかった」と感じていただけるよう
カウンセラーやエンジニア・デザイナー
があなたの相談に真摯に向き合います。
「自分に合っているか診断してほしい」
「漠然としているが話を聞いてみたい」
こんなささいな悩みでも大丈夫です。
無理な勧誘は一切ありません
ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)