読み込み中...

TypeScriptで整数判定をマスターするための10のサンプルコード

TypeScriptのロゴと、整数判定のイメージを組み合わせた図示 TypeScript
この記事は約23分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

TypeScriptを使用したプログラミングを行う際、数値の扱いは避けては通れない道です。

特に整数を確実に判定することは、アプリケーションの品質や処理速度に大きな影響を及ぼすため、その重要性は言うまでもありません。

今回の記事では、初心者から中級者までの読者を対象に、TypeScriptで整数を正確に判定する方法を10の具体的なサンプルコードを通じて詳しく解説していきます。

整数判定のスキルを高めることで、バグの発生を防ぎ、より堅牢なコードを書く手助けとなることを目指します。

さらに、整数判定だけでなく、それをどのように応用やカスタマイズしていくかも、この記事を通じて学べる内容となっております。

では、まず最初に整数判定の基本から学んでいきましょう。

●整数判定の基本とは

TypeScriptを学び始める際、数値の判定はその基礎の一部です。

特に、整数かどうかの判定は頻繁に遭遇するシチュエーションがあります。

ここでは、整数判定の基本的な考え方と、TypeScriptでの整数の扱いについて解説します。

○整数とは

整数とは、小数点以下がない数値のことを指します。

日常的に使用する「-2、-1、0、1、2」などの数字もすべて整数に含まれます。

また、数学的には正の整数、ゼロ、負の整数の三つに分類されます。

○TypeScriptでの整数の扱い

TypeScriptはJavaScriptのスーパーセットであり、JavaScriptでの数値の扱いを踏襲しています。

JavaScriptおよびTypeScriptでは、数値は「Number」というデータ型で表現されます。

この「Number」型には、整数も浮動小数点数も含まれるため、整数かどうかを判定する際には注意が必要です。

このコードではNumber型の変数に数値を代入しています。

この例では整数の5と浮動小数点数の5.5を代入しています。

let integer: number = 5;  // 整数
let float: number = 5.5; // 浮動小数点数

しかし、これだけでは変数が整数かどうかの判定はできません。

判定方法については、次のセクションで詳しく解説していきます。

●整数判定の10のサンプルコード

TypeScriptは、JavaScriptに静的型付けの特性を追加した言語であり、日々多くの開発者に支持されています。

特に、データの型を厳格に管理することで、バグの原因となる型の誤りを減少させることが期待されます。

その中で、値が整数かどうかを判定する場面は頻繁にあります。

ここでは、TypeScriptで整数を正確に判定する方法を10の具体的なサンプルコードを通じて紹介していきます。

○サンプルコード1:基本的な整数判定

このコードでは、Number.isInteger()メソッドを使って整数を判定するコードを表しています。

この例では、数字が整数かどうかを判定しています。

function isInteger(value: number): boolean {
    return Number.isInteger(value);
}

console.log(isInteger(5)); // true
console.log(isInteger(5.1)); // false

このサンプルコードを実行すると、5は整数であるためtrueを返し、5.1は整数ではないためfalseを返します。

○サンプルコード2:小数点のある数の判定

次に、小数点を含む数値が整数かどうかを判定する方法を見ていきます。

TypeScriptでは、小数点以下が0の場合でも、その数値は整数とはみなされません。

function hasDecimalPoint(value: number): boolean {
    return value % 1 !== 0;
}

console.log(hasDecimalPoint(10)); // false
console.log(hasDecimalPoint(10.0)); // false
console.log(hasDecimalPoint(10.01)); // true

10や10.0は小数点以下が0のため、整数として判定され、falseが出力されます。

一方、10.01は小数点以下が存在するため、trueが出力されます。

○サンプルコード3:負の整数の判定

負の整数も、正の整数と同じ方法で判定できます。

下記のコードは負の整数を判定する方法を表しています。

function isNegativeInteger(value: number): boolean {
    return Number.isInteger(value) && value < 0;
}

console.log(isNegativeInteger(-5)); // true
console.log(isNegativeInteger(5)); // false
console.log(isNegativeInteger(-5.1)); // false

-5は負の整数なのでtrueを返しますが、5や-5.1は負の整数ではありませんので、それぞれfalseが返ります。

○サンプルコード4:大きな整数の判定

JavaScriptやTypeScriptでは、非常に大きな数値は正確に扱うことが難しい場面があります。

BigIntという新しいデータ型を使用することで、これを回避することができます。

function isLargeInteger(value: BigInt): boolean {
    return value % BigInt(1) === BigInt(0);
}

console.log(isLargeInteger(BigInt("9007199254740993"))); // true

BigIntを使用して整数判定を行うと、非常に大きな数値でも正確に整数判定が行えます。

○サンプルコード5:Number.isInteger()の使用例

TypeScriptを学ぶ上で、整数判定は基本的なスキルとして理解しておくべきテーマの一つです。

整数判定にはいくつかの方法がありますが、JavaScriptやTypeScriptにおいては、Number.isInteger()という組み込み関数が提供されています。

この関数を使うと、簡単に値が整数であるかどうかを判定することができます。

このコードでは、Number.isInteger()関数を用いて、整数を判定する方法を表しています。

この例では、異なる数値のサンプルを用意し、その数値が整数であるかを確認しています。

// TypeScriptのサンプルコード
let num1 = 100;
let num2 = 100.25;
let num3 = -45;

// 整数かどうかを判定
console.log(Number.isInteger(num1)); // true
console.log(Number.isInteger(num2)); // false
console.log(Number.isInteger(num3)); // true

上記のサンプルコードでは、num1, num2, num3という3つの変数にそれぞれ異なる数値を代入しています。

その後、Number.isInteger()関数を使用して、これらの変数が整数であるかどうかを確認しています。

この結果、num1num3は整数であるため、trueと表示されます。

一方で、num2は小数点を含む数値のため、falseと表示されます。

この関数は非常に便利で、特に条件式やループ処理の中で整数の判定が必要な場面での利用が推奨されます。

しかしながら、大きな整数や非常に小さい数値の判定時には、他の方法と組み合わせることでより正確な判定が可能になります。

また、Number.isInteger()はECMAScript 2015 (ES6)で導入されたメソッドのため、古いブラウザや環境ではサポートされていないことがあります。

そのため、互換性を気にする場合や特定の環境での動作を保証したい場合には、他の方法を検討することも考慮に入れると良いでしょう。

この関数の利点は、明確かつシンプルに整数を判定できることです。

しかし、プロジェクトや使用する環境に応じて、最も適した整数判定の方法を選択することが大切です。

次に、このサンプルコードを実行した場合、次のように出力されます。

trueという結果が返されるのは、num1num3が整数であるためです。

一方で、num2は小数点を含むため、falseという結果が返されます。

これにより、簡単に値が整数であるかどうかを判定することができます。

○サンプルコード6:型ガードを利用した判定

TypeScriptの真骨頂の1つとも言える「型ガード」を使って整数の判定を行う方法をご紹介します。

型ガードは、実行時に変数の型を確かめるための特別な方法で、これを活用することでより安全に整数判定を行うことができます。

// 型ガードを利用した整数判定の関数
function isInteger(num: any): num is number {
    return typeof num === 'number' && Number.isInteger(num);
}

// 使用例
const value1: any = 123;
const value2: any = 123.45;

if (isInteger(value1)) {
    console.log(`${value1}は整数です。`);  // 123は整数です。
} else {
    console.log(`${value1}は整数ではありません。`);
}

if (isInteger(value2)) {
    console.log(`${value2}は整数です。`);
} else {
    console.log(`${value2}は整数ではありません。`);  // 123.45は整数ではありません。
}

このコードでは、isInteger関数を使って整数を判定しています。

num is numberの部分が型ガードとなり、この関数がtrueを返すと、呼び出し元でnumnumber型であると確定されます。

そのため、後続の処理で安全に数値としての操作が可能となります。

実際に、上記のコードを実行すると、「123は整数です。」と「123.45は整数ではありません。」という結果が得られます。

これにより、型ガードを利用することで、TypeScriptの型システムをフルに活用しながら、効率的に整数判定を行うことができるのです。

さらなる応用として、型ガードを組み合わせることで、複数の型判定を連続して行うことも可能です。

例えば、次のように文字列か整数かを判定する関数も作成できます。

function isStringOrInteger(value: any): value is string | number {
    return typeof value === 'string' || (typeof value === 'number' && Number.isInteger(value));
}

const testValue: any = "Hello, TypeScript!";
if (isStringOrInteger(testValue)) {
    console.log(`${testValue}は文字列か整数です。`);  // Hello, TypeScript!は文字列か整数です。
}

この方法を採用することで、プログラムの安全性と読みやすさを両立させることができるので、TypeScriptでの整数判定においては非常に推奨されるアプローチと言えるでしょう。

○サンプルコード7:正規表現を使った整数判定

正規表現とは、文字列のパターンを記述するための式です。

これを用いて整数を判定する方法を紹介します。

この手法は特にユーザー入力などの動的なデータに対して整数かどうかを確認する際に役立ちます。

このコードでは正規表現を使って文字列が整数かどうかを判定するコードを紹介しています。

この例では、正規表現のパターンを使って、文字列が0から9までの数字のみで構成されているか、また先頭に負の記号がついているかをチェックしています。

function isIntegerByRegExp(value: string): boolean {
  // 正規表現で整数のみを判定
  const pattern = /^-?\d+$/;
  return pattern.test(value);
}

// 使用例
const value1 = "12345";
const value2 = "-12345";
const value3 = "123.45";

console.log(isIntegerByRegExp(value1)); // true
console.log(isIntegerByRegExp(value2)); // true
console.log(isIntegerByRegExp(value3)); // false

上記のコードでは、isIntegerByRegExp関数を定義しています。

この関数は文字列を受け取り、その文字列が整数であるかどうかを正規表現を使用して判定します。

使用例として、value1, value2, value3 という3つの文字列を用意しました。

これらの文字列に対して、isIntegerByRegExp関数を適用すると、それぞれ「true」「true」「false」という結果が得られることがわかります。

この結果から、正規表現を使った整数判定が正確に動作していることが確認できます。

特にvalue3の例で、小数点が含まれているために「false」と判定されている点が注目されます。

しかし、正規表現には注意が必要です。

複雑なパターンや大量のデータに対して使用すると、パフォーマンスの低下が発生する可能性があります。

そのため、使用状況やデータの量によっては、他の整数判定方法を検討することも必要です。

また、この方法は文字列に対してのみ有効であり、数値そのものには使用できないため、注意が必要です。

実際の適用シーンでは、入力データの型をしっかりと確認してから、この関数を使用するようにしましょう。

○サンプルコード8:カスタム関数を使った判定

整数判定に特有のニーズや独自の条件を持つ場合、TypeScriptを使って自分自身でカスタム関数を作成することができます。

ここでは、独自の整数判定を行うためのカスタム関数の作成方法を詳しく解説します。

このコードでは、カスタム関数を使って整数を判定する方法を表しています。

この例では、入力された数値が正の整数であるかどうかをチェックするシンプルな関数を作成しています。

function は正の整数(value: any): boolean {
    // 値が数値かどうかと、正の整数かどうかをチェック
    return typeof value === 'number' && value > 0 && Math.floor(value) === value;
}

// サンプルデータで関数を試す
const testValue1 = 15;
const testValue2 = -5;
const testValue3 = 12.5;

console.log(は正の整数(testValue1)); // true
console.log(は正の整数(testValue2)); // false
console.log(は正の整数(testValue3)); // false

上記の関数は、数値が正の整数かどうかを判定します。

まず、typeofを使用して値が数値型かどうかをチェックし、次にその数値が正であるかどうか、そしてMath.floor関数を使用してその数値が整数であるかどうかを確認します。

上記のサンプルデータを使用して関数を試すと、testValue1は正の整数であるためtrueを返します。

一方、testValue2は負の整数であり、testValue3は小数であるため、それぞれfalseを返します。

こうしたカスタム関数を使用することで、プロジェクトのニーズや特定の条件に合わせた整数判定を簡単に行うことができます。

さらに、関数を拡張して複数の条件や機能を追加することも可能です。

例えば、範囲指定で整数を判定する機能や、特定の数字を除外する条件など、多様な要件に対応した関数を作成することができます。

○サンプルコード9:ユーザー入力の整数判定

ウェブアプリケーションやモバイルアプリケーションを開発する際、ユーザーからの入力を受け取ることがよくあります。

その際、入力されたデータが整数であるかどうかを判定するケースは非常に多いです。

ここでは、TypeScriptを使用してユーザーの入力が整数であるかどうかを判定する方法を紹介します。

// ユーザーからの入力を整数として判定する関数
function isUserInputInteger(input: string): boolean {
    // 入力が整数かどうかを確認する正規表現
    const regex = /^-?\d+$/;
    return regex.test(input);
}

// ユーザー入力の例
const userInput = prompt("整数を入力してください");
if (isUserInputInteger(userInput || "")) {
    console.log("入力された値は整数です");
} else {
    console.log("入力された値は整数ではありません");
}

このコードではpromptを使ってユーザーに整数を入力してもらい、入力された値が整数であるかどうかを確認しています。

正規表現/^-?\d+$/を用いて、入力が整数形式になっているかどうかをチェックしています。

この例では、-?で負の整数も考慮に入れ、\d+で1つ以上の数字が連続することを確認しています。

このコードを実行すると、ユーザーが入力した値が整数であれば「入力された値は整数です」と表示され、整数でなければ「入力された値は整数ではありません」と表示されます。

また、ユーザーからの入力を受け取る際、入力の形式を限定することはセキュリティ面でも重要です。

例えば、ユーザーからの入力をデータベースに保存する場合、不正な形式の入力を防ぐことで、SQLインジェクションなどのセキュリティリスクを低減することができます。

そのため、ユーザーからの入力を受け取る際には、入力の形式を確認することが非常に重要です。

ユーザーが正の整数のみを入力するように制限したい場合、正規表現を/^\d+$/に変更することで、負の整数の入力を拒否することができます。

// 正の整数のみを許可する関数
function isPositiveInteger(input: string): boolean {
    const regex = /^\d+$/;
    return regex.test(input);
}

// 使用例
const userInput = prompt("正の整数を入力してください");
if (isPositiveInteger(userInput || "")) {
    console.log("入力された値は正の整数です");
} else {
    console.log("入力された値は正の整数ではありません");
}

このコードを実行すると、ユーザーが入力した値が正の整数であれば「入力された値は正の整数です」と表示され、それ以外の場合は「入力された値は正の整数ではありません」と表示されます。

○サンプルコード10:配列内の整数の判定

配列内の全ての要素が整数かどうかを判定するケースを考えることは、実際の開発現場でも頻繁に遭遇するシチュエーションの一つです。

配列内の要素を一つ一つ調べるために、TypeScriptでのアプローチをいくつか紹介します。

このコードでは、Array.prototype.everyを使って配列の全ての要素が整数であるかどうかを調べるコードを紹介しています。

この例では、Number.isInteger()を使用して、各要素が整数であるかどうかをチェックしています。

// 配列内の全ての要素が整数であるかどうかを判定する関数
function isAllIntegers(arr: number[]): boolean {
    return arr.every(value => Number.isInteger(value));
}

// 使用例
const sampleArray1 = [1, 2, 3, 4, 5];
console.log(isAllIntegers(sampleArray1));  // true

const sampleArray2 = [1.5, 2, 3, 4, 5];
console.log(isAllIntegers(sampleArray2));  // false

上記のコードを実行すると、最初の配列sampleArray1は全て整数の要素から成るため、trueを返します。

一方、sampleArray2には小数点のある数字(1.5)が含まれているため、falseを返します。

この方法の利点は、配列内の全ての要素が指定した条件(この場合は整数であること)を満たしているかどうかを簡単にチェックできることです。

しかし、一つでも条件を満たさない要素があればfalseを返すため、どの要素が条件を満たさなかったのかを特定することはできません。

もし、条件を満たさない要素を特定したい場合は、Array.prototype.filterを利用すると良いでしょう。

// 整数でない要素を配列として返す関数
function nonIntegers(arr: number[]): number[] {
    return arr.filter(value => !Number.isInteger(value));
}

// 使用例
const sampleArray3 = [1, 2, 3.5, 4.5, 5];
console.log(nonIntegers(sampleArray3));  // [3.5, 4.5]

このコードでは、整数でない要素だけを新たな配列として取得することができます。

上記のコードを実行すると、[3.5, 4.5]という結果が得られます。

●注意点と対処法

TypeScriptで整数判定を行う際には、いくつかの注意点と対処法が存在します。

正確な判定を行い、予期しないエラーやバグを回避するためには、これらの点を知っておくことが重要です。

○小数点以下の数値の判定

TypeScriptにおける数値の型は、整数や小数を問わずnumber型で表されます。

そのため、小数点以下の数値の判定を行う場合は、特別な手段を用いる必要があります。

このコードでは、小数点以下の部分を持つ数値を判定する方法を表しています。

この例では、数値を10倍して、その結果が整数かどうかを確認することで、小数点以下の数値の有無を判定しています。

function hasDecimalPart(value: number): boolean {
    return value * 10 !== Math.floor(value * 10);
}

// 使用例
const num = 5.5;
if (hasDecimalPart(num)) {
    console.log(num + " は小数点以下の数値を持っています。");
} else {
    console.log(num + " は整数です。");
}

上記のコードを実行すると、「5.5 は小数点以下の数値を持っています。」と表示されます。

○大きな整数の扱い方

JavaScriptやTypeScriptは、非常に大きな整数や非常に小さな整数を正確に表現することが難しい場合があります。

これは、内部での数値表現の限界によるものです。

そこで、大きな整数を扱う場合の注意点としては、BigIntを活用することが推奨されます。

このコードでは、BigIntを用いて大きな整数を扱う例を表しています。

この例では、非常に大きな整数を2つ足し合わせています。

const bigInt1 = BigInt("9007199254740991");
const bigInt2 = BigInt("9007199254740991");
const result = bigInt1 + bigInt2;
console.log("結果は " + result + " です。");

上記のコードを実行すると、「結果は 18014398509481982 です。」と表示されます。

○予期しない値の対処

整数判定の際に、予期しない値(NaNやundefined、nullなど)が入力される可能性があります。

これらの値に対して、適切なエラーハンドリングを行うことで、予期しないエラーやバグを防ぐことができます。

このコードでは、数値以外の値が入力された場合にエラーメッセージを表示する方法を表しています。

この例では、typeofを使用して、入力された値が数値かどうかをチェックしています。

function isInteger(value: any): boolean {
    if (typeof value !== "number") {
        throw new Error(value + " は数値ではありません。");
    }
    return Number.isInteger(value);
}

// 使用例
try {
    const result = isInteger("文字列");
    console.log(result);
} catch (error) {
    console.log(error.message);
}

上記のコードを実行すると、「文字列 は数値ではありません。」というエラーメッセージが表示されます。

●カスタマイズ方法:自分のニーズに合わせて整数判定をカスタマイズする方法

TypeScriptの世界では、プログラミングニーズや要件に応じて、整数判定のロジックをカスタマイズすることが時々必要となります。

ここでは、特定の状況に合わせて整数判定をカスタマイズする方法をいくつかのサンプルコードを交えて解説します。

○カスタム関数の作成

整数判定をするためのカスタム関数を作成することで、自分のプロジェクトや特定のニーズに合わせた整数判定が実現可能となります。

このコードでは、範囲指定での整数判定をするカスタム関数を表しています。

この例では、指定された最小値と最大値の間に整数が存在するかを判定しています。

// 範囲指定での整数判定関数
function isIntegerInRange(value: number, min: number, max: number): boolean {
    // 日本語コメント:Number.isInteger()を使って整数かどうか判定
    if (Number.isInteger(value)) {
        // 日本語コメント:指定された範囲内に整数が存在するかをチェック
        return value >= min && value <= max;
    }
    return false;
}

// 使用例
console.log(isIntegerInRange(5, 1, 10)); // true
console.log(isIntegerInRange(15, 1, 10)); // false

上記のコードを実行すると、isIntegerInRange(5, 1, 10)trueを返し、isIntegerInRange(15, 1, 10)falseを返します。

これは、5は1と10の間の整数であるためtrueを返し、15はその範囲外であるためfalseを返すためです。

○ライブラリの活用

外部ライブラリを使用することで、より高度な整数判定やカスタマイズが可能となります。

ここでは、代表的な整数判定ライブラリとして知られるinteger-checkの使用方法を紹介します。

このコードではinteger-checkライブラリを使って、整数の判定を行う方法を表しています。

この例では、与えられた数値が正の整数であるかを判定しています。

// integer-checkライブラリをインポート
import { isPositiveInteger } from 'integer-check';

// 正の整数の判定
const value = 5;
if (isPositiveInteger(value)) {
    console.log(`${value}は正の整数です。`);
} else {
    console.log(`${value}は正の整数ではありません。`);
}

上記のコードでは、5という値が正の整数であるかをisPositiveInteger関数を使用して判定しています。

この場合、5は正の整数です。という結果が出力されます。

ライブラリを利用することで、コードの再利用や複雑な条件判定を簡潔に行うことができ、開発効率を向上させることが期待できます。

まとめ

TypeScriptを利用して整数を判定する方法は多岐にわたります。

本記事では、初心者から中級者までの読者がTypeScriptでの整数判定の技術を深めるための具体的な手法やサンプルコードを取り上げました。

それぞれの手法やコードには、特定のシチュエーションや要件に適しているものがありますので、適切な方法を選択することが大切です。

TypeScriptでの整数判定は、プログラミングの基本的なスキルの一つとして非常に重要です。

日常の開発業務だけでなく、複雑なアルゴリズムやデータ処理の際にも、このスキルは頻繁に求められます。

本記事を参考に、TypeScriptでの整数判定のスキルを高め、より高品質なコードを書くことができるようになりましょう。