バックエンドエンジニアがjavascriptに触った時につまずいた事
前回に,バックエンドエンジニアがReactに触った時につまずいた事に引き続き、javascriptを触って少し違いで戸惑ったを書きます。
constで気軽に指定する
これは僕の技術不足な可能性がありますが、c言語やphp等で書いてきたエンジニアからするとconstは気軽につかわず、定数のみ使うイメージでした。
例えば、
int c = a+b;
みたいな事は書いても
const c = a + b;
みたいな記述はしないイメージですが、javascriptでは普通に記述する感じです。
なぜこんなことが起こるのか考えると、型宣言がそもそも違う事に気付きました。
javascritpによる型宣言
javascriptによる型宣言と言えば
- var・・・変数を宣言し、ある値に初期化することもできる。
- let・・・ブロックスコープのローカル変数を宣言し、ある値に初期化することもできる。
- const・・・ブロックスコープで読み取り専用の名前付き定数を宣言する。
等があげられますが、そもそも文字列や、数値型の型を示すものではなく
スコープの違いと、再代入可と不可の違いとなり、そもそもの型宣言の方式が違います。
バックエンドで使ってきた、stringとしての文字列宣言やintとしての数値宣言等データ型ではなくスコープがメインの型なんですね。
let/var/constの違い
ついでにおさらいとして、var/let/constのおさらいもしてみます。
まず、分かりやすい所としてconstは再宣言不可なので、一回値を入れたらそれ以降変わらない値を入れる用途として使います。
varとletの違いとしては、スコープの違いが違います。
下記が分かりやすい例となります。
function testFunction() {
//if文の{}が1つのブロックの扱いとなります。
if (true) {
//ifのような{}の中で宣言をletとconstでします。
let x = 1;
const y = 2;
var z = 3;
}
console.log(x); //ブロックの外側なのでスコープ外となりundefined(未定義)となる
console.log(y); //ブロックの外側なのでスコープ外となりundefined(未定義)となる
console.log(z); //ブロックの外側ですがスコープ範囲となり、3が表示されます。
};
元々javascriptはvarのみ定義でしたが、そこにletとconstが追加され、より厳格に宣言できるようになった感じです、ですのでvarのみでもプログラム可能ですが、スコープ範囲や再代入の定義が分かり辛く可読性が下がるので、できるだけletとconstを使って定義し可読性を上げる事が可能になった感じです。