1
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?

More than 1 year has passed since last update.

if文を使わなくても良くなる?ルックアップテーブルとは?

Last updated at Posted at 2022-11-03

前置き

これから説明していくコードの書き方を知ってはいましたが、名前がついていることを知りませんでした。
あらためて知ったことを記録として残しておきたい為、参考になれば嬉しいです。

ルックアップテーブルの使い方

・ルックアップテーブルとは

計算機科学におけるルックアップテーブル(英: Lookup table)とは、複雑な計算処理を単純な配列の参照処理で置き換えて効率化を図るために作られた、配列や連想配列などのデータ構造のことをいう。
Wikipediaより引用

言葉だけだと分かりにくいと思うので、例を見ながらどんなときにどのように書くことを言うのか見ていきましょう。
下記はお金「円」の値によって取得する「果物」が変わる処理を書いています。

    if ($yen === '100円') {
       $fruit = 'オレンジ';
    } else if ($yen === '110円') {
       $fruit = 'りんご';
    } else if ($yen === '120円') {
       $fruit = 'ぶどう';
    } else if ($yen === '130円') {
       $fruit = 'スイカ';
    }

ifが数個続いて使われています。
この程度のelse ifの量であればまだ読みやすいですが、これが7、8つと続くと気になりますね。

    switch ($yen) {
      case '100円':
         $fruit = 'オレンジ';
         break;
      case '110円':
         $fruit = 'りんご';
         break;
      case '120円':
         $fruit = 'ぶどう';
         break;
      case '130円':
         $fruit = 'スイカ';
         break;
}

else ifをなくし、switch文を使用しました。
先ほどよりは見やすくなりましたが、文字量が多いところが気になりますね。

    $fruit = [
      '100円' => 'オレンジ',
      '110円' => 'りんご',
      '120円' => 'ぶどう',
      '130円' => 'スイカ',
    ][$yen];

上記のif文とswitch文より遥かに行数、文字数を短縮できました。
$fruitの期待値としては、上記の$fruitと同じ値になるはずです。
配列に前もって欲しい値を用意しておき、$yenの中身によって取り出す値を変えることができます。
これをルックアップテーブルと言います。

まとめ

時と場合によって「使用できる・できない」はありますが、頭の片隅に入れておくだけで行数や文字数を大幅に減らすことができます。名前を知らなかった、そもそもこの書き方を知らなかったという方の参考になればと思います。

参考文献

ルックアップテーブル - Wikipedia
https://ja.wikipedia.org/wiki/%E3%83%AB%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB
Laravelでよりクリーンなコードを書く
https://www.gigas-jp.com/appnews/archives/11954

1
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
1
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?