見出し画像

ハジメの一歩会③ 繰り返し処理編

もう3回目ですね、前半戦の最後になります。繰り返し処理編。
BASICから入った自分としては、なんでこんなモノがあるんだ…!と思った思い出もあり、その辺りから解説していこうかな、と思います。

第2回の条件分岐については、こちらをご参照ください。

ハジメの一歩会の説明などなど。
まぁ、いい加減聞き飽きた方も多いかな、と思いつつ、初めての方もわずかながらいらっしゃるので、説明だけは毎回欠かさず実施。
でも、だいぶ短縮版でしたね(笑)

まずは、前回の条件分岐編の復習から。
これまでの回では復習から入らなかったのに、なぜ今回だけ??
今回の繰り返し処理でも条件式を使うので、まずは前回の復習から入ることにしました。

繰り返し処理の意味、なぜ必要なのか…を微妙に語ります。
下の例だと、変数aに10を代入し続ける無限ループです。
繰り返し処理を抜ける条件が"True"となっているため、常に条件が満たされれており、永遠にループし続けます。

こちらは変数aが100以下の間ループする処理になります。aをカウントアップしています。なんらかの計算のためにカウントアップするならわかるのですが、下記の処理だけだと意味がない処理ですよね。

これならどうでしょうか?
前半部では、「今日は、」「明日は、」等を出力。
後半部では、取得したyoubiの値によって、燃えるゴミ、燃えないゴミ等出力します。
さて、ここで問題です。
①今日が金曜日なら、どうなるでしょう?
②繰り返し処理を使わずにプログラムを組むと、どうなりますか?

どーでもいいのですが、Space開催時に話題になったので、忘備録として。
プログラム中の「{」の中かっこ、なんて読むのか知ってますか?
「カーリーブラケット」と呼ぶらしいのですが、なんど聞いても「かーでぃーブラケット」に聞こえてしまい、妙な親近感を覚えました(笑)

答えは下のようになります。
問1の方は、順番にロジックを追っていけば答えは見えてきますかね。
前半部で「今日は、」とか「明日は、」と表示するために、今がいつを指しているのかをループの変数iを使って判断しています。
明後日以降は、「何曜日は、」と変数youbiも使っているのがポイントですかね。

問2の方は、繰り返し処理を使わずにロジックを書いたパターンです。ここでは7回同じ処理を繰り返しますが、繰り返し処理を使わないため、同じようなコードを7回書かなければならないことに注意してください。
7回書くというこては、それだけバグが潜むリスクが高くなるということです。前回の名言「分岐は品質の分岐点」とありましたね!
7回も同じような分岐を書けば、それだけ品質にも悪影響を与える可能性があります。可読性とのトレードオフですが、7回も繰り返して可読性が良いわけないので、ここは繰り返し処理で実施した方がGoodですよね!
また、例えば1箇所でバグが見つかってそこを修正したとします。ということは、残りの6回分についても同じように修正しないといけません。修正するということは、余分な文字を消してしまったり、ゴミを追加してしまったりすることもある、ということです。
また、5回分は修正したけど、1つを修正し忘れるなんて可能性もありますよね。
なので、プログラムは可読性を保ちつつも、短い方が良いのです!

ということで、繰り返し処理といえばこの2つですね。
他にもいろいろとあるのですが、この基本の2つ、for文とwhile文に毛が生えたようなものなので、ここではあえてこの2つだけ。
実運用だと、for文の方が利用する回数多いかもしれませんが、パラメータが少なく簡素に記述できるwhile文をメインで紹介させて頂きました。

ちょっと懐古的な話で。
VBではない、昔のBASIC時代、for文とかwhile文とかの繰り返し処理はあまり使わなかったなぁー、という思い出話です。
BASICにはGOTO文というのがあって、これとIF文の組み合わせで繰り返し処理が出来てしまうので、そちらで記述することが多かったですね。
が、構造化プログラムと呼ばれるCが出てくると、GOTO文が非推奨になります。その辺りの理由は下記がわかりやすいです。
今の時代にGOTO文を説明する必要はないのですが、歴史を知ることも1つの勉強になるかな、と思いまして書かせてもらいました。

ということで、変数、条件分岐、繰り返し処理を勉強してきました。ここまでの集大成的な問題を宿題として出してみました!

そして、クロージングです。今週も、Zoom会は金曜を前倒しして木曜に開催となります。

宿題の回答例です。
会の趣旨を汲んでくれて、いろいろな開発言語、開発ツールで回答をしていただけました!皆さん、回答ありがとうございます!
まさか、COBOLやアセンブラまで出てくるとは思っていませんでした笑

ちなみに、出戻りガツオさんのnote記事はこちら。

また、仕様を日本語で書くとコードを生成してくれるAIサービスがβ版として提供されています。
さっそく、この問題をPythonでトライしてみたところ、見事にコード生成できました!
AIについては、ITmediaの記事を参照してください。

イベント資料


この記事が気に入ったらサポートをしてみませんか?