👣

変数って11種類あんねん(TypeScriptの例つき)

2023/04/24に公開
2

変数って 11 種類あんねん(TypeScript コード例つき)

結論

変数を使う時、以下の 11 種類に分けられるとコーディングスキルの向上が見込めます。

  • 固定値: 🔒
  • ステッパー: 🔢
  • フラグ: 🚩
  • ウォーカー: 🚶
  • 直近の保持者: 👣
  • 最も重要な値の保持者: 💎
  • 収集者: 🧮
  • コンテナ: 📦
  • フォロワー: 🧑‍🤝‍🧑
  • オーガナイザー: 🗂️
  • テンポラリ: 🕰️

それぞれについての詳細を本ページでは紹介したいと思います。

プログラムにおける変数

皆さんは、コードを理解するうえで重要な要素であることは知ってると思いますが、
「プログラマー脳」では変数を以下のように述べています。

変数がどのような情報を保持しているを理解することは、コードについての理解を促し、コードを修正するための重要な鍵となります。

変数に適切な名前をつけることは、読んでいるコードをより深く理解するための道しるべのよく割りを果たすということです。

重要な変数という概念について、どうやったら深い理解にたどり着けるでしょうか。
「変数の役割」を考えるフレームワークがあればあなたの変数への理解は深まるかもしれません。
ヨルマ・サヤニエミ(jorma Sajaniemi)教授は、99%の変数は 11 個の役割に分類できると主張していています。※
以下に 11 種類の役割と例をあげます。
簡単な TypeScript のコードを使った例をあげていますので参考にしてください。

※ 出典:プログラマー脳 P80:5.1「変数の役割」フレームワーク
出典の論文らしきものは 役割を 10 個と表現していました。が書籍内容に重きにおいて 11 種類で説明します。

11 種類の役割

🔒 固定値(Constants)

概要

プログラムの実行中に不変である値を保持する変数。
円周率などの数学的な定数やファイルやデータベースから読み込んだデータを指します。

const PI = 3.14; // 固定値

🔢 ステッパー(Stepper)

概要

ループやシーケンス内の現在の反復またはステップを追跡する変数
For 文で利用するイテレーターのような場合もありますが、複雑な値をステッパーとするときもあります。

for (let i = 0; i < arr.length; i++) {
  console.log(arr[i]); // ステッパー
}

🚩 フラグ(Flags)

概要

条件や操作の状態またはステータスを示し、通常は条件文やループで使用される変数
真偽値であることが一般ですが、整数値が使われることもありますね。

let isValid = false;
if (input.value !== "") {
  isValid = true; // フラグ
}

🚶 ウォーカー(Walkers)

概要

データ構造やシーケンス内の現在の位置または場所を追跡する変数
ステッパーとの違いは、どうやってループ処理をおこなうのか決められていないという点です。
例えば、リストを走査して新しい要素の位置を探す場合に定義する変数のことを指します。

function findInsertionIndex(arr: number[], element: number): number {
  let index = 0; // ウォーカー
  while (index < arr.length && arr[index] < element) {
    index++;
  }
  return index;
}

👣 直近の保持者(Most-recent holder)

概要

最近アクセスまたは変更された値を保持する変数
直近にファイルから読み込んだ行やステッパーで最後に参照された配列要素のコピーも直近の値の保持者として扱います。

let lastClickedElement = null;
function handleClick(event) {
  lastClickedElement = event.target; // 直近の保持者
}

💎 最も重要な値の保持者(Most-wanted holder)

概要

プログラムで最も重要または重要な値を保持し、意思決定や優先順位付けに使用する変数
また、反復処理をした末、特定の値を見つけたときに格納する変数を指します。

let maxValue: number = Math.max(...arr)// 最も重要な値の保持者

🧮 収集者(Gatherer)

概要

プログラムの実行中に値やデータを集めて蓄積または集約した変数
以下のように 0 から始まり、一つの変数に集約しているとき、その変数を収集者として扱います

let sum = 0;
for (let i = 0; i < list.length; i++) {
  sum += list[i]; // 収集者
}

📦 コンテナ(Containers)

概要

値やオブジェクトのコレクションやグループ化を保持する変数
フォームとして送る値の構造体もコンテナに含まれます。

let colors = ["red", "green", "blue"]; // コンテナ

🧑‍🤝‍🧑 フォロワー(Followers)

概要

目的の変数やオブジェクトを補助するための変数
常にほかの変数とセットで利用されます。

function swapElement<T>(arr: number[], oldElement: T, newElement: T): void {
  const index = arr.indexOf(oldElement); // フォロワー
  if (index !== -1) {
    arr[index] = newElement;
  }
}

🗂️ オーガナイザー(Organizers)

概要

他の変数やデータ構造を管理したり整理したりする変数
処理を進めるために、変数を何らかの方法で変換する場合に保存するとき利用されます。
オーガナイザーは一般的にはテンポラリ変数でもあります。

const sortedArr = arr.slice().sort((a, b) => a - b); // オーガナイザー

🕰️ テンポラリ(Temporaries)

概要

中間または一時的な値やデータを保持し、通常は計算や変換で使用される変数。
temp や t という名前でよく利用されます。

let temp = currentValue; // テンポラリ
if (temp < targetValue) {
  return;
}

参考

  • プログラマー脳 ~優れたプログラマーになるための認知科学に基づくアプローチ
    https://amzn.asia/d/4xI45HA
GitHubで編集を提案

Discussion

saneatsusaneatsu

(TypeScrit コード例つき)

小さいのですがタイトルの TypeScrit がタイポです...!

2nofa112nofa11

ご指摘ありがとうございます!
修正いたしました🫡