基本

基本 の JavaScript

3個の演習

基本について

JavaScriptは動的なプロトタイプベースの言語です。いくつかのプリミティブがあり、それ以外はすべてオブジェクトとみなされます。

JavaScriptはWebページのスクリプト言語として最もよく知られていますが、Node.jsなど、ブラウザー以外の多くの環境でも使われています。この言語は活発に開発されており、マルチパラダイムという性質から、さまざまなプログラミングスタイルが可能です。JavaScriptは動的な言語で、オブジェクト指向、命令型、宣言型(たとえば関数型プログラミング)といったスタイルをサポートしています。

(再)代入

JavaScriptで名前に値を代入するには、主にいくつかの方法があります。変数を使うか、定数を使うかです。Exercismでは、変数は常にcamelCaseで書き、定数はSCREAMING_SNAKE_CASEで書きます。従うべき公式のガイドがあるわけではなく、企業や組織によってさまざまなスタイルガイドがあります。変数は好きなように書いてかまいません。演習で用意されているとおりに書く利点は、WebインターフェースやほとんどのIDEで、それぞれ違うふうに強調表示されることです。

JavaScriptの変数は、const、let、varのキーワードを使って定義できます。

letやvarを使うと、変数はその存続期間の中でさまざまな値を参照できます。たとえば、myFirstVariableは、代入演算子=を使って何度も定義し直すことができます。

let myFirstVariable = 1;
myFirstVariable = 'Some string';
myFirstVariable = new SomeComplexClass();

letやvarとは対照的に、constで定義された変数には一度しか代入できません。これはJavaScriptで定数を定義するために使われます。

const MY_FIRST_CONSTANT = 10;

// Can not be re-assigned.
MY_FIRST_CONSTANT = 20;
// => TypeError: Assignment to constant variable.

定数への代入

constキーワードは、変数と定数の_両方_で言及されます。定数に関してよく言及されるもう一つの概念は、(不)可変性です。

constキーワードが不変にするのは_束縛_だけです。つまり、constの変数に値を代入できるのは一度だけです。JavaScriptでは、プリミティブの値だけが不変です。ただし、非プリミティブの値は依然として変更できます。

const MY_MUTABLE_VALUE_CONSTANT = { food: 'apple' };

// This is possible
MY_MUTABLE_VALUE_CONSTANT.food = 'pear';

MY_MUTABLE_VALUE_CONSTANT;
// => { food: "pear" }

定数の値(不変性)

原則として、Exercismや、他の多くの組織やプロジェクトのスタイルガイドでは、const SCREAMING_SNAKE_CASEのような値は変更しません。技術的にはその値を変更する_ことはできます_が、明確さと期待をそろえるために、Exercismではこれは推奨されていません。これを_どうしても_強制しなければならないときは、Object.freeze(value)を使います。

const MY_VALUE_CONSTANT = Object.freeze({ food: 'apple' });

// This silently fails
MY_VALUE_CONSTANT.food = 'pear';

MY_VALUE_CONSTANT;
// => { food: "apple" }

実際のコードベースでは、Object.freezeがそこらじゅうにあるのを見ることはほとんどありませんが、SCREAMING_SNAKE_CASEの値を決して変更しないというルールはよいルールです。多くの場合、リンターなどの自動解析で強制されます。

関数宣言

JavaScriptでは、機能の単位は_関数_にまとめられます。たいていは、関係する関数を同じファイルにまとめます。これらの関数は仮引数(引数)を受け取り、returnキーワードを使って値を_返す_ことができます。関数は()の構文で呼び出します。

function add(num1, num2) {
  return num1 + num2;
}

add(1, 3);
// => 4

💡 JavaScriptには、関数を宣言する方法が_たくさん_あります。これらの他の方法は、functionキーワードを使う場合とは見た目が違います。このトラックではそれらを少しずつ紹介していきますが、すでに知っている場合は、どれを使ってもかまいません。ほとんどの場合、どちらを使ったからといって良し悪しがあるわけではありません。

エクスポートとインポート

exportとimportのキーワードは、普通のJavaScriptファイルをJavaScriptモジュールに変える強力なツールです。コードが、関数、クラス、変数、定数などの構成要素を選択的に公開できるようにするだけでなく、次のようなさまざまな機能も可能にします。

具体的な例は、ExercismのJavaScriptトラックでテストがどのように動くかです。各演習には、たとえばlasagna.jsのような実装ファイルが少なくとも1つあり、また、たとえばlasagna.spec.jsのようなテストファイルが少なくとも1つあります。実装ファイルはexportを使って公開APIを公開し、テストファイルはimportを使ってこれらにアクセスします。こうすることで、実装の結果をテストできるのです。

// file.js
export const MY_VALUE = 10;

export function add(num1, num2) {
  return num1 + num2;
}

// file.spec.js
import { MY_VALUE, add } from './file';

add(MY_VALUE, 5);
// => 15
GitHubで編集 リンクは新しいウィンドウまたはタブで開きます

基本を学習する