@U-12031

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

変数を連続で宣言するとき

皆さんに質問したいこと

JavaScriptで、下のようにletconstを一つにまとめて一度に複数の変数を宣言するコードを見たとき、皆さんはどう感じますか?

  • 文法的(または慣習的)におかしいですか?
  • 少し分かりにくいと思いますか?
  • 分かりやすくていいと思いますか?
  • 特に何も思いませんか?
sample.js
    // 例

    let
       hoge = 2,
       fuga = "foo",
       piyo = {
           lv: 1,
           lvUpCost: 100
       }
0 likes

セミコロンレスに書ける言語なのにコロンを使って連続宣言するメリットは文字数削減以外に無いといえば無いと思いますね.
強いて感想を書くならこれやると変数を追加したい時にGit差分が見づらくなるので嫌というのが…

こうなる
-let a,b
+let a,b,c
こっちのほうがすっきり
let a
let b
+let c

今のJSならlet変数を多用するようなコードはあんまり書かないようにしますし.

1Like

圧縮されてるJSを見ているような気分ですが、基本的にそんな書き方はしません。
文法的に正しいか正しくないとか、分かりやすいそうでないとかの次元では無く、個人的に異端であるのは確かです。

私もVercleneさんのようなアフターの方のコードで書きます。

逆に問いたいのですが、このやり方に固執するのは何故ですか?

1Like

質問者さんやこのサイトの回答者・閲覧者が個人的に見やすいか否かという話ではなく、質問者さんが組織に属して組織の一員としてコーディングを行っているのであれば、組織のコーディングルールに従う、ルールがなければ話し合ってルールを作ってそれに従うという話になると思います。

質問者さんが個人で仕事をしていて、保守にも他人が関わることはないなら、質問者さんの好みで決めればいいことです。

1Like

個人的な意見。

letやconstを分割して書かないコードを書いてる人はこだわりが強いんだろうなと思うのはそうだけど、
そもそも、その書き方をするにしてもletの直後に改行は入れない。

1Like

この例のようなコードは良く読まないと、

これ変数に代入してるのか?

って勘違いしてしまう場合もあると思うので、
毎回letconstを使うべきじゃないでしょうか。

2Like

特に何も思いません
が、letと同じ行になるべくまとめておく方が見晴らしは良いと感じます

js
const a=1,b=2,c=3

基本的に変数をまとめて宣言する場面はコレクションの分解時です

const x={i:"a",j:"b",k:"c"}
const {i,j,k}=x
const y=[1,2,3]
const [a,b,c]=y

個別で宣言するよりは、コレクションリテラルと併用する方が意図を伝えやすいでしょう

const [a,b,c]=[1,2,3]
3Like

Google JavaScript Style Guideを始めたとした多くのコーディング規約、linter等では変数は1つづ宣言すること推奨しています。
理由がなければそれに従うべきでしょう。

もし個人開発なら自分の意見を最優先にすればいいです。一般的にどうかなんて気にしなくてもいいです。

ある程度の集団で開発する場合は、多くのケースで採用されているものをルールとし、変更する理由があるものだけ変更するほうが良いです。(当たり前の話ですが理由というは個人的な好みどうこうではなく、プロジェクト固有の事柄によるものです。)
デファクトスタンダードになっているのはそれなりに理由があります。そこから周りを巻き込んで外れるのは全体として必ずマイナスになります。

皆さんはどう感じますか?

むしろあなたがどう感じているかを詳細に書いたほうがよりよい議論になるかと思います。どこに魅力を感じているのか、個別に宣言する方法のどこがダメなのか等々。

1Like

ごめんなさい、不具合なのかわからないのですが回答へのコメント(返信)ができないので、これをもってクローズとさせていただきます
自分はこの書き方を初めて知って、それが皆さんにとってどう感じられるか質問したかったのでこの質問を投稿させていただきました。
皆さんのご意見から、このような書き方はほとんどしないことが分かったので、これからは辞めようと思います。
皆さんのご意見を聞くことができてとても嬉しかったです!
回答してくださった方、ありがとうございました!

0Like

回答へのコメント(返信)ができないのはこの投稿が「質問」ではなく「意見交換」だからでしょうね

文法的(または慣習的)におかしいですか?

文法的にはおかしくないです。(エラーは起きないでしょう)
期待通りの動作かどうかは何を期待するかに依りますが。

セミコロン無しに改行する場合に、「Automatic semicolon insertion」の仕組みが動作する点を把握してください。

let直後でセミコロンを挿入すると構文エラーになるので、ASI対象にならずに変数はすべてlet宣言になります。

慣習的には、他の方も言う通りプロジェクト次第ですので何とも言えません。
私が指揮するならやりません。

少し分かりにくいと思いますか?
分かりやすくていいと思いますか?
特に何も思いませんか?

他の方も言うように、プロジェクトの方針で"黒とされているものは黒として扱う"のが前提です。

そのうえで、個人的な感性で言えば。
この書き方を許すプロジェクトでは、a=b,と書かれた行が、aを宣言しているとしてletなのかconstなのか(省略)varなのか、宣言済みのaへの単なる代入+カンマ演算子なのか、同じ行内で「わからない」ので、思考リソースがかさばることになります。
読み取るのが、わかりにくいというかめんどくさいです。

let、const、varをカンマ区切りにしない・省略しないこと(あるいは同じ行内でカンマ区切りで宣言すること。(ただし、他の方の指摘通り差分で不利を被る))としていれば、あるていど避けられる面倒です。

0Like

Your answer might help someone💌