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

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

ただいまの
回答率

90.51%

  • Ruby

    7689questions

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

  • Ruby on Rails

    7289questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby 文字列の結合 +と式展開の違い

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 577

dongw

score 110

https://github.com/cookpad/styleguide/blob/master/ruby.ja.md

cookpadの規約にあるのですが、

[SHOULD] 文字列リテラルに対して String#+ を用いて他の文字列を連結してはならない。式展開を使用すること。

この文字列結合時に式展開を利用する理由とは何でしょうか?
処理速度向上など何か理由があっての規約でしょうか?

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

+1

はい、オブジェクトの生成個数が違ってきます。

リテラル文字列からの連結にすると、「文字列リテラル」と「完成形の文字列」の2つのオブジェクトが生成されますが、変数展開すれば結果しか生成されないので効率的です。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/03/28 13:39

    回答ありがとうございます。
    moge = "あ"
    hoge = "い"
    の2つの変数が存在する場合は
    moge + hoge

    "#{moge}#{hoge}"
    のどちらとも結果しか生成されないと思うのですがこの場合はどうなるのでしょうか?

    キャンセル

  • 2017/03/28 14:20

    だから、「文字列リテラルに対して」なのです。両者が変数の場合は対象外です。

    キャンセル

  • 2017/03/28 14:25

    失礼しました。
    文字列リテラルのときだけ対象なのですね。ありがとうございました。

    キャンセル

+1

「bad」として例示されている記法の中には、特に悪いと思えないようなものも存在しているが、その理由はコードの一貫性を保つためである。

と書いてあります。ですから理由としては「コードの一貫性を保つため」となろうかと思います。

そして、なぜ式展開を使用することが選ばれたのかは、maisumakun さんのおっしゃることが理由だろうと推測されますが、これに明確に答えられるのはクックパッド社だけであろうと思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/03/28 14:24

    回答ありがとうございます。
    規約として一貫性を保つために採用している、ということですね。
    ここに何故?と思うのはちょっと時間のムダかもわかりませんね。

    キャンセル

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

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

関連した質問

  • 解決済

    RubyのMechanizeでクッキーを追加したい

    RubyでMechanizeを使ったアプリを作っています。サーバはjavascriptを使ってクッキーをセッするためMechanizeではクッキーを取得できません。 そのクッキーを

  • 解決済

    Rails のビューで画像を3づつ表示させたい

    ビューでループを行いくつかの画像を3つずつ表示させたいです。 ネストされたループを使うことも出来ると思うのですが、ここでも行き詰っています。ご回答お待ちしております。

  • 解決済

    RubyでDir.chdir以外のディレクトリ移動の方法

    Rubyであるコマンド文字列を複数受け取り、それを実行して行くような事をしたいと思っています。 基本的には、コマンド文字列を systemや``などを使って実行していけば良いのです

  • 解決済

    Ruby における ?? 演算子

    Ruby で以下のように C# の?? 演算子を使用することは可能なのでしょうか? x = nil y = 1 a = x ?? y # aは 1  a = y ?? 2 # 

  • 受付中

    FizzBuzz問題について

    FizzBuzz問題を解いています。 3の倍数の時にFizz 5の倍数の時にBuzz 15の倍数の時にFizzBuzzと出力するものです。 今回は、数字をカンマ区切りで表示したいの

  • 解決済

    rake routesした際のprefixとは??

    皆様、よろしくお願い申し上げます。 routingを設定した時に、名前付きルートを確認するため"prefix"を確認することがあるとおもいます。 私は"prefix"とはなんぞ

  • 解決済

    アフィン暗号とその復号について

    難問克服 解いてわかるガロア理論(藤田岳彦 著)という書籍に アフィン暗号とその復号の問題が載っていたので、 コードを書いてみました。 require 'OpenSSL' @a

  • 解決済

    バイナリーサーチ whileとif式の構造に関して

    前提・実現したいこと下記コードのwhile式とif式の構造を理解仕切れていません。 そのため、2つ以上の式が複合している場合の式の構造やその処理の順序を理解したいと考えています。

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

  • Ruby

    7689questions

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

  • Ruby on Rails

    7289questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。