はじめに
PythonやJavaScript、PHPなどのさまざまなプログラミング言語で"for文"というものが最初に出てきますよね。どの教材でもfor文は使われ、絶対にプログラムでも多用しています。アンチパターンもいくつかありますが、逆を言えば、アンチパターンがあるくらい使い方があります。
最初に思うはずです。
「なんで、for文ってforなの?」
これまでに受け入れてきてしまった"for"について由来を見てみましょう。知らなそうなエンジニアに自慢してみてください。
for文とは
基本的な使い方としては、何かの指示に従って配列オブジェクトなどに対して、適用できる「〇〇の分だけ、同じ処理をしてね!」というものです。
(for文とはなんぞ、別にやらんでいいやろ!と思われるかもですが、簡単にPythonで書いておきます。)
words = ['Japanese', 'English', 'French']
for w in words:
print (w)
# 結果
Japanese
English
French
同じ処理を繰り返すので「ループ処理」とも言われます。ではなぜloopじゃなくて、forなのか?と思いますよね。おれもそう思い、3年くらい経過していました。
ちなみに、別でwhile文もループ処理になります。
ちなみに、使い分けとしては、
- for文: 繰り返し回数を指定したい処理
- while文: とにかく条件ごとに値を処理
という使い分けができそうです。
本題:for文は如何にしてforなのか。
そろそろ本題に入りましょう。
なぜ、for文はforでループ処理なのか?
調べてみました。
そもそも、ループ処理の種類の表し方は?
ループ処理では、whileやforがあることはご存知の通りかもしれませんが、本来は、
- for-loop
- while-loop
のように示します。
実際、C++では、 C6294 不適切に定義された for-loop: 初期条件がテストを満たしていません。 ループ ボディは実行されません
のように、for文処理を行ったものに対してこのようにエラーが出ることもあります。
ここまでくると1つわかってくることがあります。
for-loopとwhile-loopというものがあり、loopをとるとforかwhileなのかわからなくなるから、それならforやwhileを取ってしまえ!ということになります。
forの意味は?
それではforやwhileにはどういう意味があるのでしょうか?
まずは普通に英語で考えてみましょう。
- present for you:
- 「〜に対して」という意味で使用されていますね。
- They played the song on a loop for 20 minutes.: 20分間、その曲を繰り返し流した。
- こじつけかもしれませんが、loopとして使うことも多々あります。
forは前置詞の時に、「〜に対して」や「〜の間」のような使われ方をする上に、loop forといった使われかたもするようです。
あんまりみんな見ない、wikipedia
For loopというものを見つけたので、読んでみたら最初に書いてあるではないか。
The name for-loop comes from the word for. For is used as the keyword in many programming languages to introduce a for-loop. The term in English dates to ALGOL 58 and was popularized in ALGOL 60. It is the direct translation of the earlier German für and was used in Superplan (1949–1951) by Heinz Rutishauser. Rutishauser was involved in defining ALGOL 58 and ALGOL 60.[citation needed] The loop body is executed "for" the given values of the loop variable. This is more explicit in ALGOL versions of the for statement where a list of possible values and increments can be specified.
for-loopという名前はforという言葉に由来する。forは多くのプログラミング言語でforループを導入するキーワードとして使われている。英語ではALGOL 58で使われ、ALGOL 60で普及した。これは以前のドイツ語のfürの直訳であり、Heinz RutishauserがSuperplan(1949-1951)で使用した。RutishauserはALGOL 58とALGOL 60の定義に関与した[citation needed]。ループ本体はループ変数の与えられた値に対して「for」実行される。ALGOLバージョンのfor文では、可能な値のリストとインクリメントを指定することができ、これはより明示的です。(これ、deeplの力。)
ALGOLとはなんぞや、ドイツ語なんや、Heinz Rutishauserという人がおったんや、、、などなど情報量はたくさんあるが、ここでみたいのは、「ドイツ語」ということ。
ほう・・・
調べてみたら、あったああああああああああああ!
ドイツ語のfürの意味
コトバンクで調べてみた。
https://kotobank.jp/dejaword/f%C3%BCr
❶ ⸨利益・目的・用途⸩ ([英] for)…のために〈の〉; …に与えるために〈の〉; (手紙などが)…あての; …に備えて; …に適した; …担当の
❷ ⸨味方⸩ …に賛成して, …に味方して.
❸ ⸨関係・関連⸩ …にとって〔は〕; …については, …としては; …のところは.
❹ ⸨代理・代表・立場⸩ …の代わりに; …を代表して; …の立場で.
❺ ⸨代価・報酬・報い⸩ (ある金額)とひきかえに; …に〔対して〕.
❻ ⸨共感・好意などの対象;特定の動詞・名詞と結びついて⸩ …に対する, …に.
❼ ⸨時間的⸩ ⸨期間を表して⸩ …の間〔の予定で〕; ⸨予定の日時を表して⸩ …に.
❽ ⸨特性・同一性⸩ …〔である〕と〔して〕.
❾ ⸨比較・割合⸩ …にしては, …の割には.
❿ ⸨反復・連続;無冠詞の同一語を反復して⸩ …ずつ, …ごとに.
❼ ⸨時間的⸩ ⸨期間を表して⸩ …の間〔の予定で〕; ⸨予定の日時を表して⸩ …に.
「〜の間」という意味らしい。先ほど、for文でも使わなくもなかったのだが、明確にはありませんでした。
しかし、その語源とされているドイツ語では意味として、「〜の間」という意味になることから、for-loopは一定期間繰り返す、ということで使われたのであろう。と推測してる。
wikipediaにもあった
https://ja.wiktionary.org/wiki/f%C3%BCr
❿ ⸨反復・連続;無冠詞の同一語を反復して⸩ …ずつ, …ごとに.
「〜の間」というのは、なんとなく英語でもわかっていたけど、その上で「反復・連続」の意味もありそうです!英語で言うfor eachっぽいのかな。処理もあるし。
けつろんけつろんけーつろん
for文のforには意味があった。ドイツ語らしい。勉強になった。
皆さまのありがたいお声の数々
叩かれ放題の記事となっております(笑)
はてなブックマーク
twitterでの記事の検索結果