JavaScript
42
どのような問題がありますか?

この記事は最終更新日から3年以上が経過しています。

Organization

意地でもconstを使う方法

JavaScriptでconstを意地でも使いたい方へ。
try-catch等でもconstを使って代入を行う方法です。

前提条件

ES2015(のconst)が使用できる環境。
なお、IE11でもconstは使用できるみたいです!わーい!
ただしArrow functionsは使用できないので、function文を使用してください。ひどいよー……。

まえがき

constはES2015で追加された構文で、JavaScriptに定数という概念をもたらしました。
再代入を禁止したいので、できるだけconstを使いたいですよね。

しかし、問題となるのがtry-catch等での代入処理。
const letではブロックスコープとなるため、try文の中で変数宣言をすると、ブロックの外では変数の参照ができません。

そういった場面でもconstを使いたいと人向けの内容です。

ビフォーアフター

Before
let fileContent;
try {
    fileContent = fs.readFileSync("/path/to/file");
} catch (e) {
    fileContent = "default value";
}
After
const fileContent = (() => {
    try {
        return fs.readFileSync("/path/to/file");
    } catch (e) {
        return "default value";
    }
})();

解説

try-catchを即時関数で包んであげているだけです。
記述の仕方によっては上記のように行数が増えますが、constを使えるメリットと比べると些細なものですね。

その他

switch-case

returnを使用するため、breakを書く必要がなくなります。
そのため、Scalaのパターンマッチライクな記述になり、かなり見通しが良くなります。

before
let num = 0;
switch (flag) {
    case "A":
        num = 1;
        break;
    case "B":
        num = 2;
        break;
    case "C":
        num = 3;
        break;
}
after
const num = (() => {
    switch (flag) {
        case "A": return 1;
        case "B": return 2;
        case "C": return 3;
        default : return 0;
    }
})();

if

三項演算子よりも見やすくなる……わけないですね。
今回の技を使わず、三項演算子を使ってください。
フレンズによって得意なこと違うから!

bad
const bool = (() => {
    if (str === "str") {
        return "true";
    } else {
        return "false";
    }
})();
good
const bool = (str === "str")
        ? "true"
        : "false";

IE11

前述の通り、IE11ではArrow functionsが使えないため、IE向けにトランスパイルするか、function式を使用してください。

IE11
const element = (function () {
    try {
        return document.getElementById("id");
    } catch (e) {
        return document.body;
    }
})();

あとがき

軽くググっても出てこなかったので今回書いてみました。
これを使えば、ほとんどconstでかけると思います。
もっといい方法などありましたら教えていただけると幸いです!

参考

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
ユーザー登録ログイン
talog
JavaScript と日々戯れているフロントエンドエンジニア。TypeScript, JavaScript, Scala あたりが好きです。編集リクエスト・コメント歓迎。
bengo4
「専門家をもっと身近に」を理念として、人々と専門家をつなぐポータルサイト「弁護士ドットコム」「弁護士ドットコムニュース」「税理士ドットコム」を提供。
この記事は以下の記事からリンクされています

コメント

try/switch/ifなどが式になればな…と思う

1
どのような問題がありますか?
あなたもコメントしてみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン
記事投稿イベント開催中
深層学習の論文について解説してみた
~
Azure Machine Learning を使って機械学習に関するナレッジをシェアしよう
~
42
どのような問題がありますか?
ユーザー登録して、Qiitaをもっと便利に使ってみませんか

この機能を利用するにはログインする必要があります。ログインするとさらに下記の機能が使えます。

  1. ユーザーやタグのフォロー機能であなたにマッチした記事をお届け
  2. ストック機能で便利な情報を後から効率的に読み返せる
ユーザー登録ログイン
ストックするカテゴリー