LoginSignup
0
0

More than 1 year has passed since last update.

railsチュートリアル第4章 文字列とメソッド

Posted at

文字列とメソッド

Ruby を学ぶためのツールとして、主にRailsコンソールを使っていく
Railsアプリケーションを対話的に操作するためのコマンドラインツール
クラウドIDEとは何か? 多分cloud9だと思う。

environmentsより上に行ったあと

$ nano ~/.irbrc

Ctrl-Xと押してnanoエディタから離脱します。ファイルを保存するかどうか訊かれるので、yキーを押して~/.irbrcファイルを保存

IRB.conf[:PROMPT_MODE] = :SIMPLE
IRB.conf[:AUTO_INDENT_MODE] = false

どうすればいいかわからなかったのでsample_appまで降りてrails consoleを起動
デフォルトでは、コンソールはdevelopment(開発)環境という
Ctrl-Cを押してコンソールから強制的に抜け出すこと
Ctrl-Dを押して正常にコンソールを終了させることもできます
Ctrl-Pまたは上矢印キーで以前に実行したコマンドを再利用

文字列

文字列(string) は、Webアプリケーションにおいておそらく最も重要なデータ構造
ここで入力したものは文字列リテラルと呼ばれ

文字列の結合

>> "foo" + "bar"    # 文字列の結合
=> "foobar"

式展開

#{}という特殊な構文を使います 。

>> first_name = "Michael"    # 変数の代入
=> "Michael"
>> "#{first_name} Hartl"     # 文字列の式展開
=> "Michael Hartl"

代入

>> first_name = "Michael"
=> "Michael"
>> last_name = "Hartl"
=> "Hartl"
>> first_name + " " + last_name    # 苗字と名前の間に空白を入れた結合
=> "Michael Hartl"
>> "#{first_name} #{last_name}"    # 式展開を使って結合 (上と全く同じ)
=> "Michael Hartl"

出力

>> puts "foo"     # 文字列を出力する
foo
=> nil

戻り値には「文字どおりの無」であるnilを返します。nilは「何にもない」ことを表すRubyの特別な値

>> print "foo"    # 文字列の画面出力 (putsと同じだが改行がない)
foo=> nil

改行する

>> print "foo\n"  # puts "foo" と等価
foo
=> nil

シングルクォート内の文字列

シングルもダブルも実質的に変わらないらしい。
しかしシングルでは式展開はできない。

>> 'foo'          # シングルクォートの文字列
=> "foo"
>> 'foo' + 'bar'
=> "foobar"
>> '#{foo} bar'     # シングルクォート内の文字列では式展開ができない
=> "\#{foo} bar"

ダブルクォート文字列を用いた文字列で#のような特殊な文字を使いたい場合は、この文字をバックスラッシュでエスケープ(escape)する必要がある。
シングルクォートは、入力した文字をエスケープせずに「そのまま」保持するときに便利
シングルクォートで文字列を囲めば、簡単にバックスラッシュ文字のような特殊文字をそのまま変数に含める。

>> '\n'       # 'バックスラッシュ n' をそのまま扱う
=> "\\n"
>> 'Newlines (\n) and tabs (\t) both use the backslash character \.'
=> "Newlines (\\n) and tabs (\\t) both use the backslash character \\."

シングルクォートで囲むと文字列で特殊文字を使うことができる
ダブルクォートで文字列を囲む場合はバックスラッシュを前につけなければならないらしい。

演習

city変数に適当な市区町村を、prefecture変数に適当な都道府県を代入
変数と式展開を使って、住所の文字列を作れ。出力にはputsを使え。
半角スペースをタブに置き換えろ

>> city = "aa"
=> "aa"
>> prefecture = "bb"
=> "bb"
>> puts = "#{prefecture}#{city}市"
=> "bb県 aa市"

ダブルをシングルにしてみるとどうなるか?
予想ではそのままの文字列になると考えている。

>> puts = '#{prefecture}県 #{city}市'                                      
=> "\#{prefecture}県 \#{city}市"

予想通りになった。

オブジェクトとメッセージ受け渡し

Rubyでは、あらゆるものがオブジェクトです。文字列やnilですらオブジェクト
「オブジェクトとは何であるか」という直感を養う必要があります。
オブジェクトとは(いついかなる場合にも)メッセージに応答するものです。

>> "foobar".length        # 文字列に "length" というメッセージを送る
=> 6

この場合は6がオブジェクトになるらしい

emptyメソッド

true,falseの返事が返ってくる

>> "foobar".empty?
=> false
>> "".empty?
=> true

if

>> s = "foobar"
>> if s.empty?
>>   "The string is empty"
>> else
>>   "The string is nonempty"
>> end
=> "The string is nonempty"

elsif

条件文を2つ以上含めたい

>> if s.nil?
>>   "The variable is nil"
>> elsif s.empty?
>>   "The string is empty"
>> elsif s.include?("foo")
>>   "The string includes 'foo'"
>> end
=> "The string includes 'foo'"

&&(and)||(or)、!(not)

>> x = "foo"
=> "foo"
>> y = ""
=> ""
>> puts "Both strings are empty" if x.empty? && y.empty?
=> nil
>> puts "One of the strings is empty" if x.empty? || y.empty?
"One of the strings is empty"
=> nil
>> puts "x is not empty" if !x.empty?
"x is not empty"
=> nil

Rubyでは、あらゆるものがオブジェクトです。

nilもオブジェクト

>> nil.to_s
=> ""

nil に対してさまざまなメソッドを渡せることを確認

>> nil.empty?
NoMethodError: undefined method `empty?' for nil:NilClass
>> nil.to_s.empty?      # メソッドチェーンの例
=> true

nilメソッド

nilかを確認するメソッド

>> "foo".nil?
=> false
>> "".nil?
=> false
>> nil.nil?
=> true

if

ifがtureの時に実行される

puts "x is not empty" if !x.empty?

unless

unlessでもifの代わりができる

>> string = "foobar"
>> puts "The string '#{string}' is nonempty." unless string.empty?
The string 'foobar' is nonempty.
=> nil

オブジェクトを2回否定どんなオブジェクトも強制的に論理値に変換

!! 二重否定

>> !!nil
=> false
>> !!0
=> true
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0