7
3

【Ruby】ループ処理について掘り下げて考えた

Last updated at Posted at 2024-02-15

自己紹介

はじめまして、はる(@lemonade_37)と申します。完全異業種からのエンジニア転職を目指して学習をしています。

概要

自分は完全未経験であり、Rubyで初めてプログラミングを学んだため、「繰り返し」と言う概念が当たり前にある前提でeach文などの説明が始まり、 ???🧐??? となりました。
通っていたスクール内で技術面談等を利用したり、さまざまな技術記事を見たりして、
自分が理解できるまで掘り下げて考えたものをまとめました。

注意

私は前職が完全異業種であり、英語も苦手で、スクールに入って初めてプログラミングに触れました。
そんな自分が理解しづらかった部分を、同じように初めてプログラミングの概念に触れた人に向けてまとめました。
自分の復習も兼ねて、超超噛み砕いて書いているため、周りくどい書き方になっている箇所もあるかと思います。

また、初学者のため、間違っている箇所もあるかもしれませんのでその際は教えて頂けると嬉しいです🙇

  

ループ処理(繰り返し)とは

Ruby公式リファレンス内で探したのですが、「繰り返し」の概念自体を解説しているページは見つからなかったので自分の言葉で説明します。
一旦eachforなどの細かいコードの使い方は置いておいて、

ループ処理とは、繰り返すことです。
手作業で1つ1つやると大変なことも、ループ処理を使えば楽にできます。

お店の商品の値段の一覧のグループがあったとします。その値段の全ての、消費税込みの値段が知りたいとします。
値段 * 1.1をすべての値段に1回ずつ実行するのは面倒だし大変です。
そこで、下記のようにループ処理を使えば、すべての値段にまとめて同じ計算を実行できます。

commodities = [250, 80, 500, 580, 300, 560]

commodities.each do |commodity|
  puts commodity * 1.1
end
出力:
275.0
88.0
550.0
638.0
330.0
616.0

自分のようにプログラミングの概念がわからないのに、
eachはこうで…whileはこうで…似たようなの色々出てくるけど何がどう違うの🤯
というところから入ってしまうとつまづくので、
ループ処理はプログラミングの醍醐味で、たくさん繰り返す処理を楽に実行できるものなんだな、と先に理解しておくと良いと思います。

噛み砕いて考える

スクールの講師の方に技術面談で質問し、下記のようなイメージで考えるよ良いと口頭で教えていただいたのがとてもわかりやすかったため、図にしました。
for文やeach文の詳しい説明は割愛しますが、どちらも
「配列の要素を1つずつ順番に取り出して、その取り出したものに対して繰り返し同じ処理をする」
という動きをします。

IMG_1200.jpeg

  

  • 図の例で言うと、配列[1, 2, 3]の値123が順番に配列から取り出されて、変数iに代入されます。
    その後、1回のループごとにprint i * 2が実行され、そのループの時代入されているiの値を2倍した値が主力されています。
      
  • ループ文の|i|の部分で使われているiなどの変数は、ループ処理の中で、ループする配列やハッシュなどの値を1つずつループごとに代入しています。これはループ内のみで一時的に使われる変数です。
      
  • ループ内でしか使われないため、名前はなんでも良いです。試しに他の文字に変えてみても動作することが確認できます。(本来こんなふうにはしませんが)
    [1, 2, 3].each do |abcd|
      print abcd
    end
    #=> 123
    
    [1, 2, 3].each do |x|
      print x
    end
    #=> 123
    
    [1, 2, 3].each do |xyyyyyyyyxyxyxyxyxyyyxyx|
      print xyyyyyyyyxyxyxyxyxyyyxyx
    end
    #=> 123
    

 

  • ではiとは何かというと、慣習でよく使われるものです。本来、アプリ内でループ処理を使う際には、iではなく、そのループを表す意味のある語句にした方が、読みやすいコードになります。
    慣習として、配列など複数の値を持つものは複数形で命名し、ループ処理の変数はその単数系にすることが多いです。
    cats = ["Persian", "Scottish Fold", "American Shorthair", "Russian Blu"]
    
    cats.each do |cat|
      puts "猫種:#{cat}"
    end
    
    出力:
    猫種:Persian
    猫種:Scottish Fold
    猫種:American Shorthair
    猫種:Russian Blu
    

まとめ

  • ループ処理とは、同じことをたくさん繰り返す処理を、楽に実行できるもの
  • ループ処理で出てくる|i|iなどは、ループ内のみで一時的に使われる変数
  • ループ内で使われる変数名はなんでも良いが、慣習としてループする配列名(英語の複数形)の単数形にすることが多い。

  
Rubyのループ処理の各メソッドについては、下記記事でまとめました。

ここまで読んでいただきありがとうございました!🙇

@scivolaさんよりforeachの違いについて詳しくわかりやすくコメントいただきました。
詳しく知りたい方はぜひコメントまで読んでいただけると幸いです。

参考記事

7
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3