【Ruby】文字列を結合するメソッド(+, <<, concat)の違いとは?

f:id:haru89:20200412211716p:plain:w200

Rubyで文字列を結合する主な方法が3つあったので、それぞれの違いを調べてみた。

1. +メソッドで文字列と文字列を連結する方法

str1 = 'Hello '
str2 = 'World!'
 
p str1 + str2 # => Hello World!
p str1 # => "Hello"
p str2 # => "World!"

ちなみに+メソッドを使ったあとでも文字列に変化なし。

2. <<メソッドで文字列の末尾に文字列を連結する方法

<<は主にシフト演算のときに使用するメソッドだが、文字列を結合するときも使用できる。

str1 = 'Hello '
str2 = 'World!'
 
p str1 << str2 # => "Hello World!"
p str1 # => "Hello World!"
p str2 # => "World!"

代入されるstr1の末尾に文字列が結合されるため、str1はもとの文字列である「Hello」が維持されない破壊的メソッド。

3. concatメソッドで文字列の末尾に文字列を連結する方法

concatはStringのメソッドで、文字列の末尾に引数で指定した文字列を結合する。

str1 = 'Hello '
str2 = 'World!'

p str1.concat(str2) # => "Hello World!"
p str1 # => "Hello World!"
p str2 # => "World!"

concatメソッドも<<メソッドと同じく、破壊的メソッド。

まとめ

<<メソッドとconcatメソッドは、もとの文字列が維持されない破壊的メソッドなので注意。 また、動きが同じように見える<<メソッドとconcatメソッドは参考ページによると、<<の方がconcatメソッドよりもわずかに処理速度が速い。 また、「concat」と書くよりも「<<」と書くほうが字数が少ないので、concatメソッドよりも<<メソッドのほうに軍配が上がりそう。

参考

https://qiita.com/Kta-M/items/c7c2fb0b61b11d3a2c48

【Ruby】andと&&ってなにか違いあるの?

andと&&って特に挙動に違いはなく、

「個人の好みによってどっち使ってくれても大丈夫ですよ〜」

f:id:haru89:20200405142808j:plain:w200

って感じだと思ってた、、、けど違った!

例えば

a = true && false
p a  # => false
b = true and false
p b  # => true

どちらもfalseになると思ってたけど、そうじゃなかった!

なぜなのか?

andと&&は優先順位が違う

優先順位をみてみると、、、

(優先順位:高)
  !  ~
  **
  *  /  %
  +  -
  <<  >>
  &
  |  ^
  >  >=  <  <=
  ==  !=
  &&
  ||
  ..  ...
  ?:
  =
  not
  and  or
(優先順位:低)
andは優先順位がかなり低い

さっきの例をもう一度みてみる

a = true && false

の場合は、最初に

true && false

が実行され、その結果がaに代入されるので、false

b = true and false

の場合は、最初に

b = true

が実行され、その後

and false

が実行されるので、trueになっていた!

ちなみにこんな感じでカッコ()で囲むと、、、

c = (true and false)
true and false

が先に実行されるのでfalseになる。

c = (true and false)
p c  # => false

まとめ

優先順位の違いを意識してandや&&を使う!

参考

https://qiita.com/riku-shiru/items/533a01bdf18e2e3eef46

【Ruby】割り算するときは小数に注意

3を2で割ってみる。 普通だったら1.5となるはずだが、、、

p 3 / 2     # => 1

f:id:haru89:20200405022623j:plain:w200

1.5にならない!
なぜ1になっているのか?

Rubyは、整数同士で割り算をした場合、計算結果は小数点以下が省かれて整数となる仕様となっている。

では、小数を含めた結果が欲しいときは、どうするか?

計算の中のいずれかの数値に小数を含める。

p 3.0 / 2   # => 1.5

または

p 3 / 2.0   # => 1.5

じゃあ、変数を使って計算するときは?

to_fメソッドを使う!

to_f メソッドはオブジェクトをFloatクラスのオブジェクト(浮動小数点数)に変換するメソッド。

num1 = 3
num2 = 2

value = num1.to_f / num2
p value   # => 1.5

数字に対しても同様に使える!

p 3 / 2.to_f  # => 1.5

まとめ

割り算をする時に、小数点を含めた計算結果を得るには、to_fメソッドを使うか数値に小数点以下を記載して計算をする!

参考

https://docs.ruby-lang.org/ja/latest/method/String/i/to_f.html https://26gram.com/ruby-numeric

Gitのコミットメッセージ間違えた!修正するには?

gitにpushするまでのルーチン

1. 変更したファイルの確認

$ git status

2. 変更したファイルのソースコードを確認

git diff

3. コミットするファイルを選択

$ git add ファイル名

4. コミット (オプション-m でメッセージも一緒に)

$ git commit -m "コミットメッセージ"

5. プッシュ

その前にやっぱりコミットメッセージを変えたい!そんな時は?

f:id:haru89:20200322132232j:plain

--amend を付けてもう一度コミットしなおせばメッセージを修正できる!

$ git commit --amend -m "新しいコミットメッセージ"
amendって日本語だとどんな意味?

改正、修正する。 すでにあるものをもっと良くするためのちょっとした修正のイメージ。

5.コミットログでコミットメッセージが修正されていることを確認

$ git log

6.プッシュ!

$ git push

参考

https://qiita.com/yukiyoshimura/items/7aa4a8f8db493ab97c2b

MVCモデルってなに?便利なの?

MVCモデルってなに?便利なの?

MVCモデルとは

MVCとはModel・View・Controllerの略で、処理を3つの役割に分割してアプリケーションソフトウェアを実装する手法(デザインパターン)。

f:id:haru89:20200311161630p:plain

Controller

ModelとViewの仲介役で、View(ユーザーの入力)から受け取ったデータをModelに渡して、Modelによって処理されたデータをViewに渡す。

Model

データベースとデータのやり取り(データの取得、更新、削除、新規作成など)を行う。

View

ModelやControllerによって作り出されたデータをもとにHTML生成を行う。

MVCモデルを使うメリット

1.アプリケーション開発をModel、View、Controllerに役割分担することで、効率的に開発を進められる。 ひとりはViewを担当し、その間に他の人はModelを担当するといった分業ができる。

2.どの処理がどこに記述されているかが明確になるので、仕様変更や修正に対して影響を受けにくく管理しやすい。また、エラーが発生した場合にも、どこが原因なのか発見しやすい。

まとめ

アプリケーションの全体を考えないでプログラムを書いてしまうと、コードを管理しきれず不具合の修正や追加機能の実装が困難になったり、必要なファイルを探すのに苦労したり。。。 MVCモデルに沿って開発することで、管理がしやすくなり効率的に開発ができるのではないでしょうか。

参考

https://railstutorial.jp/ https://ja.wikipedia.org/wiki/Model_View_Controller