const result = something(value)
if(result) {
something2(result)
} else {
something3(value)
}

こういうのやりたいことが多いけど result は次の if とそのブロックでしか使わないのにスコープが長くなる
どこで使われてるのか探すのが手間になるし const なので result って名前が以下で使えなくなる
かと言って 使いまわしたくもないから let で解決ってわけでもない
必要なのは次の if とそのブロック内だけなのに

ブロックスコープにすると解決はするけど
みやすさがいまいち

{
const result = something(value)
if(result) {
something2(result)
} else {
something3(value)
}
}

for みたいに if にも ブロック内だけで有効な変数宣言できたらいいのに

if(const result = something(value)) {
something2(result)
} else {
something3(value)
}

ほとんどはこれで解決する
けど ときどき代入結果の文字数が 3 文字以上だったり数値が 0 以上だったり そのまま if の条件に使えないときもある

if や for みたいにブロックスコープに意味を持たせれば見た目的にもわかりやすいし こういうことできたらいいのに

scope(const result = something(value)) {
if(result) {
something2(result)
} else {
something3(value)
}
}

これだと if のところに result を使った式を書ける

どうせなら const や let のブロックにできたらもうちょっと見やすいかも

const(result = something(value)) {
if(result) {
something2(result)
} else {
something3(value)
}
}

こうみるとけっこうありな気がする

const(x = foo(), y = bar()) {
//
}

let(x = foo(), y = bar()) {
//
}

でもこれって with でいいんだよね

with({x: foo(), y: bar()}) {
//
}

with は変数を使うと参照先がわかりづらいデメリットが大きいけどリテラルを使う限り with ってすごく良い仕組みだと思う
非推奨にするのもったいないなー