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

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

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

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

Q&A

解決済

4回答

1068閲覧

Ruby()と[]の違いが分かりません助けて欲しいです

TheNinja

総合スコア13

Ruby

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

1グッド

2クリップ

投稿2019/02/05 10:46

[]と()の中で実行できる数値を入れたいです。
()と[]のどちらを使うことが一般的ですか?使い分ける場合、この2つの違いはなんですか?

初心者なもので何が一番いい回答なのか分からないです。

a = (1..3) puts a b = (1,2,3) puts b c = [1..3] puts c d = [1,2,3] puts d

上記のコードを実行してみると、bの部分でのエラーですべて表示されませんでした。なのでb部分を消して実行してみたところa,c,dが実行され以下が出てきました。

1..3 1..3 1 2 3

dのレスポンスが私のしたかった命令です。
ただ、eachでこれらを使うと

a.each do |number| puts(number) end c.each do |numb| puts(numb) end d.each do |num| puts(num) end
1 2 3 1..3 1 2 3

と、aとdはきちんと実行できました。
これってつまり、dの[1,2,3]で配列した方がどちらの場合でも間違いはないってことですよね?
それかaの(1..3)の方法を使うのもいいでしょうか?
どうか心優しいかた、教えてください。

DrqYuto👍を押しています

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

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

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

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

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

guest

回答4

0

これってつまり、dの[1,2,3]で配列した方がどちらの場合でも間違いはないってことですよね?

何をしたいかによって、適切な形は変わってきます。

  • a1..3という範囲を表現するRangeオブジェクト(外側のカッコは無意味)
  • b…文法的に成立せず
  • caを配列に入れたもの
  • d…数値3つの入った配列

Rangeオブジェクトはeachすると、範囲内の値を順に生成していきます。

投稿2019/02/05 10:55

maisumakun

総合スコア145121

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

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

TheNinja

2019/02/05 11:07

ああ!なんかわかる気がします! 1..3はRangeオブジェクトだから ``` (1..3).each do |number| puts number end ``` みたいに(1..3)からも始まれるeachがあるんですね!!
guest

0

ベストアンサー

回答その2

ruby

1n = 100 2while (n /= 2; n > 0) 3 p n 4end

こんな感じです。(n /= 2; n > 0)n /= 2 した上で、n > 0 の値を返し、true の間、p n を実行し続けます。これが「一括り」の意味です。

ちなみに、; は、改行の代わりなので、

ruby

1n = 100 2while (n /= 2 3 n > 0) 4 p n 5end

としても同じです。

投稿2019/02/05 12:57

編集2019/02/05 13:59
kts_h

総合スコア207

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

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

TheNinja

2019/02/05 15:25

ふむふむふむ whleっていう動作などの中では()を使ってその処理方法的なものをかけるのですね、それを一括りとしていると! ()の中身は比較的に、処理がかかれたりするのですかね? []は逆に式とかいれないですもんね、keyや値をいれることが多いような。 ()は処理多め []は数値や単語多め みたいな感覚でいいでしょうか?!
kts_h

2019/02/05 22:15

違います。 [] は、文法的に[] を使うべきところで使う必要があります。 () は、ひとつ又は複数の式を一括りにしたいと思えば、いつでも使うことができます。
TheNinja

2019/02/06 04:12

すごい!いきなり分かりました! めちゃそれ分かりやすいです!!へへ ありがとうございます!!!!
guest

0

実は、Rubyの場合、いろいろ難しいんですよね。
puts (1)の括弧と、puts(1)の括弧は意味が違うとか、[]は実はメソッド名だとか。

大まかに言うと、
()
・式の優先順位を示す。メソッドの直後でない限りこちらです。
・・・例:(1+2)*3

・メソッドの引数を示す。メソッドの直後だとこちらです。
・・・例:puts(1,2,3)。ただし、puts (1,2,3)は直後じゃ無いので上記の意味になりエラー

[]
Arrayの表記に使う。オブジェクトの後でない場合。
・・・例:[1,2,3,[x,y]]

・オブジェクトの後ならメソッドの一種なので、クラスによって意味が違う。
・・・例:"ABC"[1] ENV["PATH"]

投稿2019/02/05 12:50

otn

総合スコア84423

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

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

TheNinja

2019/02/05 15:19

優先順位→なるほど! メソッドの引数を示す→あ、なんか、わかりそう、うう。 array→なるほど! クラスによって変わる→んあー!!!!orz 分かりそうで分からない、もどかしいけど楽しいです 分かりやすくまとめてくださってありがとうございます!!
guest

0

() は、式を一括りにします。1, 2, 3 は多重代入する場合以外には文法として誤りなので、b = (1, 2, 3) はエラーになるのです。

多重代入は、b = 1, 2, 3 のようにします。

そうすると、b = [1, 2, 3] と同じになります。

投稿2019/02/05 11:20

kts_h

総合スコア207

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

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

TheNinja

2019/02/05 11:35

ううううんんん。なるほど!多重代入っていうことになるのですね! ただ、今()と[]でも足し算をしてみたりコードを試したのですが、[]でも四則演算が実行とかできてしまって、違いがイマイチあやふやです・・・。
kts_h

2019/02/05 11:38

分かるように説明してください。
TheNinja

2019/02/05 12:08

(2+2)[2+2]でもどちらでも式は実行されたのです! 式を一括りというのは、こういう意味の式ではないですか? kts_hさんの説明のように、多重代入の時にか()は省略できるし式を一括りにしているよっていう明示性を高めるくらいで、()にはあまり強い意味はないってことでしょうか?
kts_h

2019/02/05 12:52

コメント欄にはインデント付きのコードが書けないので、独立した回答にします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問