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

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

ただいまの
回答率

88.13%

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

解決済

回答 4

投稿

  • 評価
  • クリップ 2
  • VIEW 624

score 13

[]と()の中で実行できる数値を入れたいです。
()と[]のどちらを使うことが一般的ですか?使い分ける場合、この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)の方法を使うのもいいでしょうか?
どうか心優しいかた、教えてください。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+1

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/05 20:07

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

    キャンセル

checkベストアンサー

0

回答その2

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

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

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

n = 100
while (n /= 2
       n > 0)
  p n
end


としても同じです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/06 00:25

    ふむふむふむ
    whleっていう動作などの中では()を使ってその処理方法的なものをかけるのですね、それを一括りとしていると!

    ()の中身は比較的に、処理がかかれたりするのですかね?

    []は逆に式とかいれないですもんね、keyや値をいれることが多いような。

    ()は処理多め
    []は数値や単語多め みたいな感覚でいいでしょうか?!

    キャンセル

  • 2019/02/06 07:15

    違います。

    [] は、文法的に[] を使うべきところで使う必要があります。

    () は、ひとつ又は複数の式を一括りにしたいと思えば、いつでも使うことができます。

    キャンセル

  • 2019/02/06 13:12

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

    キャンセル

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/05 20:35

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

    キャンセル

  • 2019/02/05 20:38

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

    キャンセル

  • 2019/02/05 21:08

    (2+2)[2+2]でもどちらでも式は実行されたのです!
    式を一括りというのは、こういう意味の式ではないですか?

    kts_hさんの説明のように、多重代入の時にか()は省略できるし式を一括りにしているよっていう明示性を高めるくらいで、()にはあまり強い意味はないってことでしょうか?

    キャンセル

  • 2019/02/05 21:52

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

    キャンセル

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/06 00:19

    優先順位→なるほど!
    メソッドの引数を示す→あ、なんか、わかりそう、うう。

    array→なるほど!
    クラスによって変わる→んあー!!!!orz

    分かりそうで分からない、もどかしいけど楽しいです
    分かりやすくまとめてくださってありがとうございます!!

    キャンセル

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

  • ただいまの回答率 88.13%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る