やあ、こんにちは。JavaScriptの世界へようこそ。
コードを書いていると、最初は楽しくても、ふとした瞬間に「えっ、なんでこうなるの?」と足元をすくわれるような体験をすることがあるよね。大丈夫、それは君が成長している証拠だよ。
今日は、JavaScriptの「数字」にまつわるちょっとした秘密のお話。特に、「BigInt(ビッグイント)」という、なんだか強そうな名前のやつについて解説するね。
—
1. そもそも、なぜ「巨大な数字」が苦手なの?
JavaScriptの標準的な数字である `Number型` には、実は「扱える限界」があるんだ。
例えるなら、「小さな小銭入れ」かな。これまでは100円玉や1000円札を数枚入れる分には全く問題なかった。でも、何億、何兆という「国家予算レベルの数字」をその小銭入れに無理やり詰め込もうとしたらどうなるだろう?
そう、溢れ出しちゃうよね。JavaScriptで言うと、あまりに巨大な数字を扱うと、正確な値が保てず「だいたいこれくらいかな?」というアバウトな数字に丸め込まれてしまうんだ。
これを解決するために登場したのが、BigIntという「金庫」なんだ。
—
2. BigIntってどうやって使うの?
使い方はとっても簡単。数字の末尾に `n` をつけるだけ。これだけで、JavaScriptは「あ、これは小銭入れじゃなくて金庫に入れるべき数字だな」と判断してくれるよ。
// 普通の数字(Number型)
const normalNumber = 9007199254740991;
// BigInt型(末尾にnをつける)
const bigNumber = 9007199254740991n;
console.log(bigNumber + 1n); // 9007199254740992n
// これなら、どれだけ大きくても正確に計算できるよ!
—
3. ここでつまずく人が多い「混在の禁止」
さて、ここからが本題。JavaScriptの現場でみんながよく「うわっ!」と叫ぶポイントがある。それは、「Number型とBigInt型を混ぜて計算できない」というルールだ。
想像してみてほしい。君がお店のレジで、日本円(Number)と、なぜか異世界の通貨(BigInt)を同時に出したら、店員さんは困ってしまうよね。「どっちを基準に計算すればいいの!?」って。
JavaScriptも全く同じで、型が違うもの同士を計算しようとすると、「型が違うよ!」とエラーを返して止まってしまうんだ。
const money = 100; // Number型
const bigMoney = 100n; // BigInt型
// console.log(money + bigMoney);
// ↑ これを実行すると “TypeError: Cannot mix BigInt and other types” と怒られるよ!
このエラーを見たとき、「えっ、JavaScriptって柔軟な言語じゃないの?」と思うかもしれない。でも、これはJavaScriptが「計算結果をどちらの型に合わせればいいか分からないから、適当にやって事故るより、一度止めて君に確認しよう」という優しさを持ってくれているからなんだ。
—
4. どうやって解決する?(変換のテクニック)
もし計算したいなら、どちらかの型に「合わせる」必要があるんだ。やり方は簡単。
const money = 100;
const bigMoney = 100n;
// 1. BigIntをNumberに変換する(小銭入れに合わせる)
console.log(money + Number(bigMoney)); // 200
// 2. NumberをBigIntに変換する(金庫に合わせる)
console.log(BigInt(money) + bigMoney); // 200n
ここで一つだけ注意点。Numberに変換するとき、もし数字が大きすぎると、また「小銭入れ」に戻した時に精度が落ちてしまう可能性がある。だから、基本的には「なるべくBigInt(金庫)側に寄せて計算する」のが安全な設計のコツだよ。
—
最後に:完璧じゃなくていいんだよ
JavaScriptのデータ型は、最初はとっつきにくいかもしれない。でも、この「型」のルールは、君の書いたコードが予期せぬ場所でバグを起こさないための、いわば「防波堤」みたいなものなんだ。
BigIntが必要になる場面は、Web制作の現場ではそんなに頻繁じゃないかもしれない。でも、いざという時に「あ、あれがあったな」と思い出せれば、君はもう一段階上のエンジニアになれる。
焦らず、少しずつ道具を増やしていこう。何か分からないことがあったら、いつでも聞きに来てね。君のコードが、今日もどこかで誰かを幸せにしていることを応援しているよ!

コメント