コンテンツにスキップ

プログラミング/JavaScript

出典: フリー教科書『ウィキブックス(Wikibooks)』

JavaScriptの世界: ウェブから広がるプログラミング

[編集]

JavaScriptの本質

[編集]

JavaScriptは、1995年に誕生したプログラミング言語で、当初はウェブブラウザ上のインタラクティブな機能を実現するために開発されました。現在では、フロントエンド、バックエンド、モバイルアプリ、デスクトップアプリケーションまで、多岐にわたる開発環境で活用されています。

基本的な文法と特徴

[編集]

変数と型

[編集]

JavaScriptは動的型付け言語で、柔軟な変数宣言が特徴です:

// 変数宣言
let name = "田中太郎";       // 再代入可能
const PI = 3.14159;        // 再代入不可
var oldStyleVariable = 42; // 従来の変数宣言(非推奨)

// 型の動的性質
let dynamic = 100;         // 数値
dynamic = "文字列に変更可能"; // 文字列に
dynamic = [1, 2, 3];       // 配列にも

// オブジェクトと分割代入
const person = {
    firstName: "太郎",
    lastName: "山田",
    age: 30
};

const { firstName, lastName } = person;

関数と高階関数

[編集]

関数は JavaScriptの中心的な概念です:

// 通常の関数
function greet(name) {
    return `こんにちは、${name}さん!`;
}

// アロー関数
const multiply = (a, b) => a * b;

// 高階関数
const numbers = [1, 2, 3, 4, 5];
const squared = numbers.map(num => num ** 2);
const evenNumbers = numbers.filter(num => num % 2 === 0);
const sum = numbers.reduce((acc, current) => acc + current, 0);

非同期処理

[編集]

Promises and Async/Await

[編集]

非同期処理は現代のJavaScriptの重要な特徴です:

// Promise
function fetchUserData(userId) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            const user = { id: userId, name: "山田太郎" };
            resolve(user);
        }, 1000);
    });
}

// Async/Await
async function getUserInfo(userId) {
    try {
        const user = await fetchUserData(userId);
        console.log(user);
    } catch (error) {
        console.error("エラーが発生しました", error);
    }
}

// フェッチAPI
async function fetchData() {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    return data;
}

オブジェクト指向プログラミング

[編集]

クラスとプロトタイプ

[編集]

クラスベースとプロトタイプベースの継承:

// クラス構文
class Animal {
    constructor(name) {
        this.name = name;
    }

    speak() {
        console.log(`${this.name}が鳴いています`);
    }
}

class Dog extends Animal {
    bark() {
        console.log("わん!");
    }
}

// プロトタイプベースの継承
function Person(name, age) {
    this.name = name;
    this.age = age;
}

Person.prototype.introduce = function() {
    console.log(`名前: ${this.name}, 年齢: ${this.age}`);
};

モジュールとエコシステム

[編集]

モジュール化

[編集]

モダンなJavaScriptのモジュールシステム:

// math.js
export const add = (a, b) => a + b;
export const subtract = (a, b) => a - b;

// main.js
import { add, subtract } from './math.js';

console.log(add(5, 3));        // 8
console.log(subtract(10, 4));  // 6

フロントエンドフレームワーク

[編集]

Reactコンポーネントの例

[編集]

Reactを使用したコンポーネント設計:

import React, { useState } from 'react';

function Counter() {
    const [count, setCount] = useState(0);

    return (
        <div>
            <p>カウント: {count}</p>
            <button onClick={() => setCount(count + 1)}>
                カウントアップ
            </button>
        </div>
    );
}

サーバーサイドJavaScript

[編集]

= Node.jsでのウェブサーバー

[編集]

Node.jsを使用したシンプルなウェブサーバー:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
    res.send('こんにちは、世界!');
});

app.listen(3000, () => {
    console.log('サーバーが3000番ポートで起動しました');
});

おわりに

[編集]

JavaScriptは、単なるウェブスクリプト言語から、あらゆるプラットフォームで活躍する汎用プログラミング言語へと進化しました。豊富なエコシステム、柔軟性、そして継続的な言語仕様の改善により、現代のソフトウェア開発において中心的な役割を果たしています。

学習を続け、常に新しい技術トレンドにアンテナを張ることが、JavaScriptプログラマーの成長の鍵となるでしょう。