アルアカ - Arcadia Academia

Arcadia Academiaは「エンジニアリングを楽しむ」を合言葉に日本のデジタル競争力を高めることをミッションとするテックコミュニティです。

JavaScriptの基本: ES6の主要機能と非同期処理の理解

Featured image of the post

JavaScriptは、Web開発において非常に重要なプログラミング言語で、特にES6(ECMAScript 2015)以降の機能が導入されてから、さらに強力で扱いやすくなりました。この記事では、JavaScriptの基本として、変数宣言、アロー関数、オブジェクトと配列操作、ES6の便利な機能、非同期処理について詳しく解説します。

1. 変数宣言:constletの使い分け

JavaScriptには、変数を宣言する方法として、varletconstがありますが、varはES6以前の方法であり、現在は推奨されていません。代わりに、letconstを使うのが一般的です。

  • let: 再代入可能な変数を宣言します。ブロックスコープ内で有効で、スコープ外からはアクセスできません。
    let name = "John";
    name = "Jane";  // 再代入可能
  • const: 再代入できない定数を宣言します。初期化時に値を必ず代入する必要がありますが、オブジェクトや配列のプロパティや要素を変更することは可能です。
    const age = 25;
    // age = 30;  // エラー: 再代入不可
    
    const person = { name: "John", age: 25 };
    person.age = 26;  // オブジェクトのプロパティは変更可能
constletの使い分け
  • 値が変更されない変数にはconstを使います。
  • 値が変更される可能性がある場合にはletを使いましょう。
2. 関数:Arrow関数(アロー関数)

アロー関数(Arrow Function)は、ES6で導入された新しい関数の書き方で、短く簡潔に記述できるのが特徴です。また、thisの扱いが従来の関数とは異なる点もあります。

基本の書き方
// 従来の関数
function greet(name) {
  return `Hello, ${name}!`;
}

// アロー関数
const greet = (name) => `Hello, ${name}!`;

console.log(greet("John"));  // "Hello, John!"
thisの違い

アロー関数ではthisが呼び出し元に依存せず、定義されたスコープにバインドされます。そのため、特にコールバック関数などで便利です。

const person = {
  name: "John",
  greet: function() {
    setTimeout(() => {
      console.log(`Hello, ${this.name}`);  // アロー関数なので、`this`はpersonを参照
    }, 1000);
  }
};

person.greet();  // "Hello, John" と1秒後に表示される
3. オブジェクトと配列の操作

JavaScriptでは、オブジェクトや配列を操作する機会が多く、特にES6で導入された便利な機能を活用することで、効率的なコーディングが可能です。

オブジェクトリテラル

オブジェクトリテラルは、キーと値をセットで持つデータ構造です。以下はオブジェクトの作成とアクセス方法の例です。

const person = {
  name: "Alice",
  age: 30
};

console.log(person.name);  // "Alice"
console.log(person["age"]);  // 30
配列操作

配列もよく使われるデータ構造で、要素を管理するためにさまざまなメソッドが用意されています。

const fruits = ["apple", "banana", "orange"];

// 配列に要素を追加
fruits.push("grape");

// 配列から要素を削除
fruits.pop();

console.log(fruits);  // ["apple", "banana", "orange"]
4. ES6の機能:分割代入、スプレッド構文、テンプレートリテラル
分割代入 (Destructuring assignment)

分割代入 は、配列やオブジェクトから値を簡単に取り出すための機能です。

スプレッド構文

スプレッド構文(Spread Syntax)は、配列やオブジェクトを展開する際に使います。コピーや要素追加が簡単にできます。

// 配列のスプレッド
const numbers = [1, 2, 3];
const newNumbers = [...numbers, 4, 5];
console.log(newNumbers);  // [1, 2, 3, 4, 5]

// オブジェクトのスプレッド
const person = { name: "Alice", age: 30 };
const updatedPerson = { ...person, age: 31 };
console.log(updatedPerson);  // { name: "Alice", age: 31 }

テンプレートリテラル

テンプレートリテラルは、文字列をバッククォート(`)で囲み、変数や式を${}で埋め込むことができる便利な機能です。

const name = "Charlie";
const greeting = `Hello, ${name}!`;
console.log(greeting);  // "Hello, Charlie!"

5. 非同期処理:Promiseとasync/await

JavaScriptでの非同期処理は、主にPromiseと**async/await**で行います。非同期処理とは、データの取得や時間がかかる処理が終了するのを待たずに、他の処理を進めるための方法です。

Promise

Promiseは、非同期処理の結果を表すオブジェクトです。thencatchを使って、非同期処理の成功や失敗に応じた動作を定義します。

const fetchData = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("データ取得成功");
    }, 2000);
  });
};

fetchData().then((data) => {
  console.log(data);  // 2秒後に "データ取得成功" と表示される
});
async/await
  • *async/await*は、Promiseをより直感的に書くための構文です。async関数内でawaitを使うことで、非同期処理が完了するまで待つことができます。
const fetchData = () => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve("データ取得成功");
    }, 2000);
  });
};

const getData = async () => {
  const data = await fetchData();
  console.log(data);  // "データ取得成功"
};

getData();
まとめ

JavaScriptのES6機能を理解することで、より効率的にコードを書くことができ、最新のWeb開発にも対応できるようになります。最初はよくわからなくても繰り返し復習し着実に理解していきましょう!

フロントエンド開発を学びたいですか?

React・Next.jsなど、モダンなフロントエンド開発をサポートします。

  • Reactの基礎から実践まで学びたい
  • Next.jsでアプリを作りたい
  • TypeScriptを使いこなしたい
まずは30分の無料相談

相談は完全無料・オンラインで気軽に

あなたを爆速で成長させるメンタリングプログラムはこちら

メンタープログラムバナー

React・フロントエンドを本格的に学ぶなら

テックアカデミー
無料相談はこちら