Skip to main content

JavaScript の記法と他言語との比較

変数の宣言

  • var ← スコープの話がややこしいので使わない
  • let : 変数
  • const : 定数

※ 他の言語との比較

項目js/tsswiftKotlinC++JavaC#RubyPHP
変数 (再代入OK)letvarvarintintintx=.. (先頭小文字)$x
定数 (再代入不可)constletvalconst intfinal intreadonly intX=.. (先頭大文字)-
コンパイル時定数--const valconstexpr intstatic final intconst int-const X
非推奨var-------
  • C# の readonly はフィールドでの指定のみでローカル変数には使えない
  • Ruby の先頭コメント # frozen_string_literal: true で文字列の変更不可となる

strict モード

js
'use strict;'

→ 他の言語にもある?

  • TypeScript: tsconfig.json"strict": true, "alwaysStrict:": true
  • PHP: declare(strict_types=1);

可変長引数

js
function myFunc1(...args) {
}
function myFunc2(a, b, ...args) {
}
言語可変長引数メモ
JavaScript...args
TypeScript...args: Int[]
Swiftargs: Int...
Kotlinvararg args: Int
Javaint... args
C#params int[] args
C++ (C形式)...
C++ (C++11〜)Args... argstemplate <class... Args>
Ruby*args
PHP...$args

無名関数、ラムダ

js
(param1, param2) => {
}
言語書き方メモ
JavaScript(p1, p2) => { ... }従来の無名関数は function(p1, p2) { ... }
TypeScript(p1: T1, p2: T2) => { ... }型付き。型は (p1: T1, p2: T2) => R
Swift{ (p1: T1, p2: T2) -> R in ... }クロージャ。{ ... in ... } の形
Kotlin{ p1: T1, p2: T2 -> ... }関数型 (T1, T2) -> R に代入して使う
Java(p1, p2) -> { ... }Java 8〜。BiFunction<T1,T2,R> などに代入
C#(p1, p2) => { ... }Func<T1,T2,R> / Action<T1,T2> など
C++11〜[capture](T1 p1, T2 p2) { ... }ラムダ式。[&] / [=] などでキャプチャ指定
Ruby->(p1, p2) { ... }ほかに lambda { |p1, p2| ... } など
PHPfunction ($p1, $p2) { ... }PHP 7.4〜は fn($p1, $p2) => expr もあり

スプレッド構文

js
const concatenatedArray = [...array1, ...array2];

あると便利系ではあるけど、慣れてないと可読性 悪いかも? いったん、積極的には使わないでおく

文字列中の変数展開(テンプレートリテラル)

js
const sentence = `My name is ${name}.`
言語書き方式は可能?カッコ省略可?
JavaScriptMy name is ${name}.ox
TypeScriptMy name is ${name}.ox
Swift"My name is \(name)."ox
Kotlin"My name is ${name}."oo
Pythonf"My name is {name}."ox
Java---
C#$"My name is {name}."ox
C++---
Ruby"My name is #{name}."ox
PHP"My name is {$name}."xo

分割代入

js
const [a, b, c] = [1, 2, 3]
言語書き方カッコ省略可?要素不足時要素過多時_ で捨てる補足
JavaScriptconst [a, b, c] = [1, 2, 3];xo undefined で埋まるo 余りの要素は無視o 空白で良い。_ も可だが、ただの変数として格納
TypeScriptconst [a, b, c] = [1, 2, 3];xo undefined で埋まる (型によっては警告)o 余りの要素は無視o 空白で良い。 _ も可だが、ただの変数として格納
Swiftlet (a, b, c) = (1, 2, 3)xx コンパイルエラーx コンパイルエラーo 可
Kotlinval (a, b, c) = listOf(1, 2, 3)xx 実行時エラー IndexOutOfBoundsExceptiono 余りの要素は無視o 可
Pythona, b, c = [1, 2, 3]ox 実行時エラー ValueError: ..x 実行時エラー ValueError: ..o 可だが、ただの変数として格納
Java- なし-- なし- なし- なし
C#var (a, b, c) = (1, 2, 3);xx コンパイルエラーx コンパイルエラーo 可
C++auto [a, b, c] = arr;xx コンパイルエラーx コンパイルエラーxarr は配列 / tuple / struct など
Rubya, b, c = [1, 2, 3]oo nil で埋まるo 余りの要素は無視o 可だが、ただの変数として格納
PHP[$a, $b, $c] = [1, 2, 3];xo null で埋まる。 Notice 発生o 余りの要素は無視o $_ で可だが、ただの変数として格納

以下広告