輝昌2016/12/152017/12/20こんにちは!Webコーダー・プログラマーの貝原(@touhicomu)です。Rubyのシンボルと文字列の違いについてわからない、どっちでもいいなら文字列でもいいんじゃない?と思っていませんか?シンボルとは文字列のようで文字列ではないものなのですが、この違いしっかりと認識しておくとシンボルと文字列の使い分けができるようになったり、わかりやすいコードがかけるようになります。文字列よりシンボルを使ったほうがメリットがある場合もあります。この記事では、Rubyのシンボルについてコロン記号「:」の意味シンボルとは?ハッシュのキーとして使用するシンボルという基本的な内容から、ハッシュと文字列の違いシンボルを使用するメリットなどの応用的な使い方に関しても学習していきます。そこで今回はシンボルと文字列の違いや使い方、メリットなどをわかりやすくご紹介していきたいと思います。まとめシンボルとは?コロン記号はシンボルの意味シンボルとは主に文字列にコロン記号「:」を前置して定義したものです。文字列を””で囲む必要はありません。コロン記号「:」が、文字列記号「””」の代わりに、「これはシンボルだよ」とRubyに知らせています。以下のサンプルコードで、文字列とシンボルを比較してみましょう。オブジェクトのclassメソッドは、そのオブジェクトがどのクラスに属しているかの値を返します。sym.class[実行結果]StringSymbol以上のように、Rubyも「””」で囲まれている場合は文字列と判定し、コロン記号「:」で前置されている場合は「シンボル」であると判定しています。前置コロンと後置コロンがある前章で解説したとおり、コロン記号「:」を文字列に前置するとシンボルになります。以降の章で解説しますが、コロン記号「:」を文字列に「後置」する場合もシンボルとなるケースもあります。ハッシュのキーとしてシンボルを使う際や、キーワード引数を使う際に、コロン記号「:」を後置します。通常はコロン記号「:」を文字列に前置することシンボルになるものと考えられてかまいません。シンボルはオブジェクトのひとつ文字列に「:」を前置しただけなので、文字列とよく似ていますがメソッドなどの名前を識別するためのラベルをオブジェクト化したものです。厳密に言えば全くの別物です。文字列との違いについては下の章で詳しく説明していますので参考にしてみて下さい。/*シンボルハッシュのキーとして使用シンボルはハッシュやアクセサ、ブロック引数などに使用されていますが、Rubyを学び始めた頃はハッシュでのキーとしてよく使用します。意味のある名前をキーに設定したいときにシンボルを使用します。キーにシンボルを使うことでプログラムの可読性があがり、コードの記述も簡単にすることができます。文字列との違いシンボルは値をもたない文字列は文字列自体がデータとして扱われますが、シンボルそのものは値を持ちません。そのため、文字列そのもののデータを必要としない場合にシンボルが使われています。データに特定の意味を持たせるRuby内部の動きも文字列とは違います。一度生成されるとシンボルがポインタとなり、複数回使用しても同じ領域を使用して値を扱うことができます。文字列を使用した場合は宣言するたびに文字列の領域が生成されます。シンボルは同一の名前であれば同じものとして扱われます。逆に文字列は記述するたびに生成され、同じ名前であっても内部では違うものとして扱われます。サンプルコードでその違いを検証してみましょう。#同じオブジェクトならtrue、別のオブジェクトならfalseを返します。#同じオブジェクトならtrue、別のオブジェクトならfalseを返します。#同じidだった→シンボルの場合は1つしかオブジェクトが作成されていないobject_idメソッドを使うと、オブジェクトに割り当てられているidを確認できます。文字列の場合は毎回オブジェクトが作られるので、同じ文字であっても違うidになります。シンボルは同じ名前であれば、1つのところをから値を参照するだけなので、同じidになります。シンボルのメリットメモリ消費が少ない上でも説明したように、シンボルは一度生成されると同じ領域をずっと使うことになるので、メモリがちょっとだけ節約できます。ちなみに、文字列は使用するたびに違う領域を使用しますので毎回メモリ領域が必要になります。可読性が上がるハッシュを作る際に簡単な記述で配列を作ることができます。通常はハッシュを作る際に以下のように記述します。}しかし、シンボルを使うことでもっとシンプルにコードを書くことができるようになります。#シンボルをキーにするときは「:」を文字列の後につけます。}見た目もスッキリするので何を書いているコードなのかわかりやすくもなります。処理が高速になる使用するたびに生成される文字列とは違い、シンボルは一度生成されると同じ領域に値を入れていくので文字列に比べて処理が高速になります。これはシンボルが文字列ではなくデータの位置を示すポインタとして内部では動いているからです。まとめいかがでしたでしょうか?学習のポイントを振り返ってみましょう!文字列にコロン記号「:」をつけると、シンボルの意味になる。文字列は「“”」で囲まなくていい。コロン記号「:」は前置したり、後置したりする場合がある。シンボルはオブジェクトの一つで、ハッシュのキーとしてよく使用する。文字列とは違い、シンボルは値を持たない。シンボルはデータにポインタとしての意味を持たせるオブジェクト。シンボルのメリットとして、メモリを消費せず、可読性があがり、処理が高速になる。文字列に比べてメモリ消費も少なく可読性もあがるのでぜひ活用してみてください。Rubyを学習している時、始めの頃はハッシュによく使用されますので初心者の方もしっかりと理解しておきましょう。TweetPocket無料でSEからWebエンジニアへ転職しませんか?侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、システムエンジニアという職業だけどコードが書けない事務作業が多くスキルがないため将来が不安スクールに通うと完全未経験者と同じスタートになるからレベルが合わないという、すでに知識があるSEならではのお悩みがあることに気づきました。弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。こちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。輝昌こんにちは!貝原(@touhicomu)と申します。現在は、Web業界のフリーランスとして、主にPHP/WordPress/BuddyPress/VPSサーバー構築などの業務を受注しています。現住所は、日本の西海岸、長崎県は波佐見町です。ボランティアでほたる撮影会やそば塾などのスタッフとして参加させて頂いています。以下の活動も行っています。