4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

あなたはfor文を扱えているか?あまりしない、だけどちょっと短縮できるやり方を紹介

4
Posted at

for文とは

任意回繰り返す処理があったり、リストの中身を順番に取り出したりするとき
毎回お世話になるfor文。これがなくてはなにもできないと言っても過言ではありません。

しかし、使い方次第でfor文がさらに便利になるのです。
ただのループ用構文だけとしてfor文を使っているともったいないです。

while文などを使わないと書けない処置が、for文をうまく扱うことで
省略することもできます。実際にやってみましょう!

おみくじプログラムでやってみる

omikuji.js
const omikujiList = ['大凶', '', '末吉', '小吉', '', '中吉', '大吉'];

export function getOmikujiResult() {
    const omikujiIndex = Math.floor(Math.random() * omikujiList.length);
    return omikujiList[omikujiIndex];
}

ここに、おみくじの結果をランダムに返すgetOmikujiResultがあります。
では問題です。

大吉になるまでおみくじの結果を出力し続けるプログラム

を書いてください。

答え

おそらく、あなたが考えたコードはこんな感じでしょう
(違ったらすいません)

for文を使わないコード
import { getOmikujiResult } from './omikuji.js';

let omikujiResult = getOmikujiResult();
while (omikujiResult != '大吉') {
  console.log(omikujiResult);
  omikujiResult = getOmikujiResult();
}
console.log("大吉が出ました!");

ですが、このコードにfor文の仕様をうまく応用すれば
もう少し短いコードにできます!(行数の話であって冗長ではあるかもしれない)

import { getOmikujiResult } from "./omikuji.js";

for (let result = getOmikujiResult(); result != "大吉"; result = getOmikujiResult()) {
    console.log(result);
}
console.log("大吉が出ました!");

3行目の長さが異常ですが、for文の仕様を確認しながら動きを順に追っていきましょう。

for文は「初期化」「条件」「実行」の繰り返し

for文の中の

let result = getOmikujiResult(); result != "大吉"; result = getOmikujiResult()

の部分がありますよね。

これは最初から順に「初期化」「条件確認」「ループ時に毎回実行すること」
を書いてあります。

もうちょっと難し目に言うと、let result = getOmikujiResult();の部分は
for文を使わない場合のlet omikujiResult = getOmikujiResult();に相当します。

そしてresult != "大吉";omikujiResult != '大吉'

result = getOmikujiResult()omikujiResult = getOmikujiResult();
対応しているのです。

結局なにが言いたいの?

変数を宣言して、while文を書いて、whileの条件は変数の不等式で、...
とやるぐらいならfor文の仕組みを使って束ねた方がいい時もあるよね。

と言う話です。

他の言語だと?

この方法にも注意点があって、
C、C++、C#、Javascript、Javaあたりだと
for文の仕様が似ているのでこの方法が通用しますが、

Pythonなどのfor VAR in LIST的な構文や、
RubyやRustのfor VAR in START..END
Luaのfor VAR = START , ENDみたいな感じだと

「初期化」「条件確認」「ループ時に毎回実行すること」
が書けないのであんまりこの方法は有用じゃありません。

for文の構文が多様な言語もあるので、興味がある場合は各自調べてください!
(この記事でまとめるのは無理そうです...)

他の方法だと、Pythonの場合はジェネレーター(関数内にyieldを書く方法)を
使ったりすると少し短縮できるかも?です

最後に

for文はかなり基本的な構文なのでちょっとしたループなど単純なことにしか
使われなかったりしますが、書き方次第でかなり応用が効いて面白いと思いました。
最後まで読んでいただきありがとうございます!

4
0
0

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
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?