JavaScriptに関するお知らせ

SINCE2019
>
【JS】JavaScriptの定数や関数の書き方は他言語に比べて長いがどうしようもない

【JS】JavaScriptの定数や関数の書き方は他言語に比べて長いがどうしようもない


こんにちは!今日はJSの定数や関数の書き方って他言語に比べて長くない?っていう恨み話と、ささやかな解決方法です。

定数も関数もconst、でも長いのがJS

JavaScriptは定数も関数もconstで宣言できます。一応letとかもあるけど。知ってる人にとってはまあ当たり前ね。こんな感じに↓

const n = 42
const plus1 = n => n + 1

constだから5文字ね。定数も変数も+5文字。 加えて関数だと最も短く書いても=>がいるから実質7文字くらい?ってとこかな? この5-7文字はJSerなら当たり前のように書いてるから、constがコンストラクトの略で...とかあんま考えたりしないし、もっと言えば長いか短いかとかも特に気にしないね。

一応、関数は以下のようにも書けます。長いけど。

function plus1(n) {
  return n + 1
}

これだともう、function{}returnで+16文字。超冗長的。

定数は何もない、関数はdefのpythonとruby

定数は特に何も付けず、いきなり変数=値みたいにする言語も割とあります。

近いとこだとrubyとpython。↓こんな感じに。

n = 42
n = 42

一方、関数は2つともdef使います。rubyはendが更に必要。pythonも:と、実質returnは必須ですねー

def plus_1(n)
  n + 1
end
def plus_1(n):
  return n + 1

ラムダ式だとこう。これが最短ですかねー書くなら

plus_1 = -> n {n + 1}
plus_1 = lambda n : n + 1

rubyは->と{}で+4文字、pythonは lamdbaと:で+7文字。pythonって美しい言われる割に意外と大したことなく...いや何でもない。

論ずるに値しないPHP

PHPはちょっと、コードの美しさって点では分が悪い...嫌いじゃないけど。

順に定数、関数を見ていきますわ

$n = 42;

function plus_1($n){
  return $n + 1;
}

ラムダ式?そんなものはない。

$があったりセミコロンがあったり大変そう...

Lua

Luaは省略。RubyとPythonの悪いとこ取りみたいな感じ...

Luaってスクリプト言語なのにスクリプト言語系比較記事であんまでなくてさみしい。

その他

省略。やっぱ見てて美しいのはスクリプト言語だよな!!(敵を作る発言)

計測

定数、冗長な関数、関数の順で何文字余分に書かなきゃいけないかをまとめてみました。

  • JavaScript

5 16 7

  • Ruby

0 6 4

  • Python

0 10 7

  • PHP

2 19 なし


PHPの圧倒的弱さ、JSの弱さは予想できましたがPythonが意外と弱い。そしてRubyつよい美しい。

JSが長い原因

c o n s t

これに尽きる。constが5文字もあるのが恨めしい。正直視覚的にはJSってめっちゃ綺麗な言語なんですよ(主観)JSより綺麗なのなんてHaskellやElmくらいだと思う。でもconstの5文字が長い。つらい。

ささやかな解決策

全部letにする

constが全部letに置きかえても問題なく動きます。ただletって書いてあると見る側は「あれ?あとで再代入するんかな?」とか思いそうであんま良くないです。全部letにする方法は関数になら十分ありだと思う。定数は、うーん...関数型で書くって空気が醸成されてればなんとか...

定数とかまとめて宣言する

こんな感じに書く。

const
one= 1,
two = 2,
three = 3,

うーんあんまり綺麗じゃないな... 昔のC言語みたい。 なんかJSHintがこれやってて総スカン食らってた気がする。

分割代入とかならいいかも↓

const [one, two, three] = [1, 2, 3]

いや良くないわ。長くっても1個ずつ書きたい。

結論

諦めろ。それでもJavaScriptは美しい。

いつか省略した場合はconstになる、みたいな仕様にならないかな... もうすぐ七夕だしお願いしてみようかな。



PREV
2019-06-30
【JS】JavaScriptにセミコロン付けない派の一意見

NEXT
2019-07-24
Githubはリポジトリを消すと芝も消える