Ruby:コマンドラインから引数を取ってくる方法

初心者向け:引数の基本その2

今回はターミナルなどのコマンドラインから引数を取ってくる方法を解説します。

コマンドラインの引数というのは、例えばターミナル上で

ruby arg.rb apple

の"apple"のように、コマンドの後に入力された部分です。この引数は一体どのような働きをするのでしょうか。それを知るため、Rubyで以下のようなプログラムを作ります。

puts ARGV

このプログラムの名前をarg.rbとしておきます。そうして、先ほどの

ruby arg.rb apple

コマンドラインに入れて実行します。すると、コマンド引数の部分であるappleと表示されます。何が起きているのでしょうか。

コマンドの引数の文字列は、組み込み定数ARGVに配列として自動的に格納されます。定義しなくても勝手にARGVというRubyで用意されている定数(変数と違い、書き換えしない入れ物)に入るので、少し戸惑うかもしれません。

コマンドラインの引数を2つにしてみます。

ruby arg.rb apple baseball

# =>apple

    baseball

arg.rbのputsprintに変えてから実行してみます。

ruby arg.rb apple baseball

# =>["apple","baseball"]

定数ARGVにコマンドライン引数が、配列として順番に入っていることがわかります。 ついでに、定数はメソッドの中からでも使うことができます。

def arg
  print ARGV
end

arg #=>["apple","baseball"]

また、コマンドラインの引数は、ARGVの配列に文字列として入るということに注意してください。 数字も文字列になっているため、計算に使いたいときは数値に変換する必要があります。

コマンドラインruby arg.rb 1 2で実行した場合 

=>["1","2"] ※数字も文字列として配列に入っている。

Ruby:戻り値の使い方

初心者向け:戻り値の使い方の基本

前回はメソッドの外で定義された変数をメソッドの中で使う、引数について解説しました。 今回は、逆にメソッドの中で定義された変数を、メソッドの外で使う方法を解説します。 メソッドの中で定義された変数を、メソッドの外で普通に呼び出そうとすると、エラーになります。

def favorite
  fruit = "apple"
end

puts fruit   #=>実行するとエラーになる

これは、スコープといって、変数が有効な範囲が決まっているためです。 では、メソッドの中のものを外から利用するにはどうするかと言いますと、メソッドの戻り値を使います。 メソッドは呼び出された後に、最後の式の結果が呼び出されたメソッドそのものに代入されるという性質があります。 この代入された値を戻り値といいます。

def favorite
  fruit = "apple" #メソッドの最後の式。
end

puts favorite  #メソッド呼び出し。最後の式の結果(戻り値)が代入されている。
# =>apple

最後の式の結果が代入されるので、2つ以上式があるときはこうなります。

def favorite
  fruit = "apple"
  sport = "baseball"
end

puts favorite #=>baseball

配列やハッシュを戻り値として渡すこともできます。

def favorite
  list = ["apple", "baseball", "cream"]
end

puts favorite #戻り値として配列が入っている。
#=>apple
   baseball
   cream

別の処理を挟むときは、メソッドの最後に配列を呼び出してやれば戻り値に配列を渡せます。

def favorite
  list = ["apple", "baseball", "cream"] #配列を作る
  puts "hello"  #戻り値としたくない処理
  list   #最後に配列を呼び出しておく(この時点では表示されない)
end

puts favorite   #呼び出し後戻り値として配列が入り、表示される。
#=>hello
   apple
   baseball
   cream

Ruby:引数の基本その1

初心者向け、Rubyでの引数の使い方(その1)

引数の使い方シリーズ、今回はメソッドで引数を使うやり方を解説します。

どういう時にメソッドで引数を使うかというと、メソッドの中と外でデータのやり取りをする時です。

変数にはスコープといって、その変数を使うことができる範囲があります。通常、メソッドの中からは、メソッドの外で定義された変数を使うことができません。逆に、メソッドの中で定義された変数も、メソッドの外から見ることはできません。

fruit = "apple" #メソッドの外

def favorite
  puts fruit #メソッドの中にあるので、外で定義されたfruitを使えない
end

favorite  #=>メソッドを呼び出すがエラーになる

それでは、メソッドの間で変数のやり取りをしたいときはどうするか?いくつか方法があるのですが、代表的な方法がメソッドに引数を設定する、というものです。

引数というのは、例えばmethod(a)のaのようにメソッドの後の()の中に書きます。そして、ここが混乱するところなのですが、引数は基本的にメソッドの定義側と呼び出し側の2箇所書く必要があります。詳しくみてみます。

まずメソッドの呼び出し側で、メソッドの中で使いたい変数を引数に指定します。メソッドを呼び出す地点で使える変数でないといけません。そうしたら今度は、メソッドの定義側で同じように引数を()の中に書きます。ここで書く引数は、取ってくる引数と同じ名前でもいいし、別の変数名をつけても構いません。注意点として、呼び出し側と定義側で引数の数が一致している必要があります。呼び出し側で取ってきた変数が、定義側の引数に書いた変数に代入されます。

fruit = "apple"   #メソッドの外

def favorite(fruit)#②定義側:呼び出し側で取ってきた変数を()の中に書く。
  puts fruit    # ③メソッドの中で外で定義した変数が使えるようになる。
end

favorite(fruit) #①呼び出し側:メソッドの中で使いたい変数を()の中に書く。
#実行結果=> "apple"
fruit = "apple"  #メソッドの外

def favorite(food)   #②定義側:メソッドの中で使いたい変数名に変えられる。
  puts food    # ③変えた変数名で使える。(変える前の変数名だとエラーになる)
end

favorite(fruit) #=>①呼び出し側:取ってくる変数なので引数の名前は変えられない。
#実行結果=>"apple"

これでメソッドの中で、外で定義された変数を使うことができるようになりました。

複数の変数を使いたいときは、method(a,b)のようにカンマ(,)で区切ることで複数の引数を取ることもできます。この場合も、呼び出し側と定義側の両方の引数の数が一致する必要があります。

ディスコード初心者向け チャットの投稿の仕方

Discordに参加したはいいけど、チャットの投稿方法がわからなくて悩んだので記事にしました。

 結論:↓ここに文字を入れてENTERです

f:id:tomonar78242114:20211219212611p:plain

ディスコード投稿方法

 今まで連絡用の掲示板しか使ったことがなかったので、もっと大きいスペースに送信ボタンがついているのを想像して探していましたが、結構小さかったです・・・

 ついでに、改行する場合はSHIFT+ENTERキーです。

 変換を確定した状態でENTERキーを押すと投稿されてしまうので注意してください!