「JavaScriptの内部関数と重複する命名をしない」というアドバイスは、とても重要です。ここでは、JavaScriptの内部関数にはどのようなものがあるか、なぜ名前の重複を避けるべきかを分かりやすく解説しますね。
JavaScriptには、あらかじめ便利な機能を持った「内部関数(ビルトイン関数)」がたくさん用意されています。
もし、あなたが作った関数に内部関数と同じ名前を付けてしまうと、JavaScriptはどちらを呼び出せば良いか混乱してしまいます。その結果、意図しない動作をしたり、エラーが発生したりする原因になります。これを「名前の衝突(競合)」と呼びます。
すべての内部関数を覚える必要はありません。「こんな機能があるんだな」と知っておき、必要になった時に調べる、というスタンスで大丈夫です。
代表的なものをいくつかご紹介します。
プログラムのどこからでも直接呼び出せる基本的な関数です。
| 関数名 | 説明 |
|---|---|
parseInt() |
文字列を整数に変換します。 |
parseFloat() |
文字列を浮動小数点数(小数点を含む数値)に変換します。 |
isNaN() |
値が数値ではない(Not-a-Number)かどうかを判定します。 |
isFinite() |
値が有限数かどうかを判定します。 |
encodeURI() |
URI(URL)として安全に使えるように文字列を変換(エンコード)します。 |
decodeURI() |
encodeURI()で変換された文字列を元に戻します。 |
特定のデータ型(文字列、配列など)に対して使うことができる、便利な機能です。データ.メソッド名() のように使います。
文字列を操作するための関数です。
slice(開始位置, 終了位置): 文字列の一部を切り出します。split(区切り文字): 文字列を区切り文字で分割し、配列にします。replace(置換前の文字, 置換後の文字): 文字列を置換します。indexOf(検索する文字): 文字が最初に出現する位置を返します。includes(検索する文字): 文字が含まれているかどうかを true / false で返します。toUpperCase() / toLowerCase(): 大文字/小文字に変換します。配列の要素を操作するための関数です。
push(要素): 配列の末尾に要素を追加します。pop(): 配列の末尾の要素を取り除きます。forEach(関数): 各要素に対して繰り返し処理を行います。map(関数): 各要素を変換して新しい配列を作成します。filter(関数): 条件に合う要素だけを集めて新しい配列を作成します。find(関数): 条件に合う最初の要素を見つけます。join(区切り文字): 配列の要素を連結して一つの文字列にします。数値計算でよく使われる機能が集まっています。
Math.random(): 0以上1未満のランダムな小数を生成します。Math.floor(数値): 小数点以下を切り捨てます。Math.ceil(数値): 小数点以下を切り上げます。Math.round(数値): 四捨五入します。Math.max(数値1, 数値2, ...): 最も大きい数値を返します。Math.min(数値1, 数値2, ...): 最も小さい数値を返します。コーディングを続けていけば、自然とよく使う関数は覚えていきます。焦らず、楽しみながら学習を進めてくださいね!応援しています!
type という名前がなぜ良くないのか、具体的に解説します。
typeのようなシンプルな命名を避ける理由type は関数名ではありませんが、多くの場面で**特別な意味を持つ「プロパティ名」**として使われるからです。
Webページ上の多くの要素は type というプロパティを持っています。
<input>タグ: input要素のtypeは、それがテキストボックス("text")なのか、ボタン("button")なのか、チェックボックス("checkbox")なのかを示します。<button>タグ: button要素のtypeは、それが送信ボタン("submit")なのか、リセットボタン("reset")なのかを示します。もし、あなたが作った変数やオブジェクトのプロパティに type という名前を付けると、これらのHTML要素が持つ type と混同し、コードを読む人が混乱したり、バグの原因になったりします。
// 例:こういうコードは混乱を招く
const button = document.querySelector('button'); // HTMLのボタン要素を取得
// このtypeはボタンの種類("submit"など)を指すのか、
// それとも自分で定義した別の「タイプ」なのか、分かりにくい
let type = "user_action";
if (button.type === type) { // 意図しない比較をしてしまう可能性がある
// ...
}
外部のサービスからデータを取得したり、React/Vueなどのライブラリを使ったりすると、データの内容や種類を示すために type というプロパティ名が非常によく使われます。
// APIから返ってくるデータや、ライブラリで扱うデータの例
{
"id": 123,
"type": "article", // ← このようにデータの種類を示すためによく使われる
"title": "JavaScriptの命名規則"
}
以下の3種類の名前は変数名や関数名として使うのを避けるのが安全です。
| 種類 | 説明 | 具体例 |
|---|---|---|
| 予約語 | JavaScriptが文法として使うために予約している単語。使用するとエラーになります。 | if, for, function, class, const, return, typeof |
| 組み込みオブジェクト名 | JavaScriptが最初から用意しているオブジェクトや関数の名前。上書きすると元々の機能が使えなくなります。 | Object, Array, String, Number, Date, Math, JSON |
| よく使われるプロパティ名 | typeのように、様々なオブジェクトで共通して使われる名前。特に注意が必要なもの。 |
name, id, value, data, target, key, message |
シンプルな単語を避け、**「何のための」**ものなのかが分かるように命名するのが良い習慣です。
type → userType, eventType, documentTypedata → userData, productDataid → userId, itemIdname → userName, fileNameこのように少し具体的にするだけで、コードが格段に読みやすくなり、予期せぬバグも防げます。経験を積むにつれて自然と身についていくので、今は「シンプルな名前は避けて、具体的に書く」ということを意識するだけでも大丈夫ですよ!