「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
, documentType
data
→ userData
, productData
id
→ userId
, itemId
name
→ userName
, fileName
このように少し具体的にするだけで、コードが格段に読みやすくなり、予期せぬバグも防げます。経験を積むにつれて自然と身についていくので、今は「シンプルな名前は避けて、具体的に書く」ということを意識するだけでも大丈夫ですよ!