質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

3回答

1097閲覧

mapメソッドの最後になんで「;」が着くの?

kuraudo

総合スコア137

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2018/02/17 23:21

編集2018/02/17 23:22

あらすじ

Rubyでmapメソッド普段から使っていましたが前から疑問がありました。
それはmapの語尾に ; が着く事があるっと言う事です。
色々なリファレンスを見ましたが中々その事について書かれているモノはありませんでした。
実際にどんな状況かサンプルコードを用いて再現してみました!
どなたかご教示、お願い致します(´;ω;`)笑

サンプルコード(hoge.rbとする)

a,b = gets.split(" ").map(&:to_i); puts a puts b

実行結果

$ruby hoge.rb 5 8 5 8

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

「いらん」というのは既に出てますが
利用方法としてREPL(irbやpry)において
普通に実行させると長い出力がでて読みづらくなる場合に
末尾に;を付ける事で出力を抑制する事ができます。

稀にREPLで考えたコードをソースにコピペする際に外し忘れる事があります。

投稿2018/02/17 23:56

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuraudo

2018/02/18 07:41 編集

おおお!笑 なんか、、こんなちょっとした質問からこんな勉強になるとは思っていませんでした。(゚うェ´。)゚笑 コメントありがとうございます(´;ω;`) irbやpryは普段重宝していましたがそれに総称がある事を知りませんでした! (大変勉強になっています!(涙)) REPL(Read Eval Print Loop)が略なんですね(´・ω・`)w > 稀にREPLで考えたコードをソースにコピペする際に外し忘れる事 事の発端はココからだったのかも知れない。。。(ふっ、深い。)
guest

0

ベストアンサー

そのコードでは;は不要です。

https://paiza.io/projects/HRIjGyGGXBx63MjPLX_qZA

プログラム・式・文 - Ruby リファレンスマニュアル の冒頭に書いてあるとおり、Rubyでは式を;または改行で区切ると文になります。つまり、ただの改行と同じです。通常は改行を使いますが、ワンライナー等で1行に収めたい場合に;を使います。

つまり、

Ruby

1a,b = gets.split(" ").map(&:to_i);puts a;puts b

Ruby

1a,b = gets.split(" ").map(&:to_i) 2puts a 3puts b

では、全く同じ意味のコードになります。

なお、;と改行の違いですが、改行の場合は、最後が\()[]等の内側である、最後が+などの演算子、最後が.で次の行にメソッド名、次の行が.で始まるメソッド、などと言った次の行が現在の式の続きであることが明らかな場合のみ改行による文の終わりとはみなされません。

投稿2018/02/17 23:42

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2018/02/17 23:48

Rubyの場合、(メソッドチェーンの.を除けば)前の行だけ見て次の行に続くか判断するので、1行目で完結しうる場合には、2行目が&など二項演算子で始まっていても、ぶった切ってしまって文法エラーになるのは要注意です。
kuraudo

2018/02/17 23:48

おおお! ご丁寧にありがとうございます((((;´゚Д゚))) > ;と改行の違い この部分知らなかったので勉強になりました! ありがとうございます!
kuraudo

2018/02/17 23:53 編集

@maisumakunさん ほんとですね!!笑笑 a,b = gets.split(" ") .map(&:to_i) puts a puts b こんな奇妙なコードでも正常に動きました!笑 面白い事を知りました(=゚ω゚)ノ ありがとうございます!
guest

0

全く不要です。

Rubyの;は、1行に複数ステートメントを詰め込む場合にだけ必要で、直後に改行するときには全く無意味です。

投稿2018/02/17 23:39

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuraudo

2018/02/17 23:44 編集

あっ、ほんとですね!!笑 `;` を消しても普通に処理が通りましたw ありがとうございます! > 1行に複数ステートメントを詰め込む場合にだけ必要 これは確かにちょくちょく見かけます(=゚ω゚)ノ > 直後に改行するときには全く無意味 ココが今回勉強になりましたm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問