ScalaとJavaの複雑さとは何か?

12
なぎせ ゆうき @nagise

言語構文的には汚くなる感じはするけど、コレクションを初期化するリテラル構文が求められてるんだろうねえ

2015-09-16 11:54:43
なぎせ ゆうき @nagise

Javaで自動テストを書くときの労力の大半はオブジェクトの初期化をするところにある気がする。 よいリテラル構文があればそれは大幅に軽減されるとも思うよ。

2015-09-16 12:06:38
なぎせ ゆうき @nagise

@megascus 初期化子まわりは欲しくなりますね

2015-09-16 12:09:31
がくぞ @gakuzzzz

初期化子みたいな専用の言語機構をオブジェクトにもコレクションにも用意して個別に覚える必要があるのに比べて、applyが省略可能とい1個のルールのみでその辺までカバーできるシンプルなScalaが複雑だと言われるのは何故なんだぜ?

2015-09-16 12:18:33
なぎせ ゆうき @nagise

@gakuzzzz applyだけを焦点にScalaのシンプルさをアピールしてもなあ…

2015-09-16 12:20:07
がくぞ @gakuzzzz

@nagise ふむー。逆に言うとScalaの複雑さってどの辺にあると感じられてるんでしょう?

2015-09-16 12:26:08
なぎせ ゆうき @nagise

@gakuzzzz 書かれているScalaのコードを解釈しようとしてたときに考慮すべき構文が多岐にわたる、みたいな

2015-09-16 12:27:03
がくぞ @gakuzzzz

@nagise なるほど。言語機構の数が少ない分、組み合わせて表現する事が多いので、一つの式で使われる構文とか言語機構は多くなるのは確かですねー

2015-09-16 12:29:10
がくぞ @gakuzzzz

でもそれは言語の複雑さなのだろうか? その式が複雑という話かな。で、Scalaで書くと複雑な式が多くなりやすい、から転じてScalaは複雑 って表現になるのかな

2015-09-16 12:30:28
なぎせ ゆうき @nagise

@gakuzzzz JavaScriptのゴルフとか見ていると「なんて複雑な言語なんだ!」と思ったりするのと似ているのかも。言語仕様のボリュームで言えばJSのほうがJavaより遥かに小さいのに

2015-09-16 12:30:36
もう疲れちゃって 全然動けなくてェ...(💉x5) @kamekoopa

糖衣構文もリテラルも無く愚直に初期化するしかないケース、むっちゃ冗長だけれど複雑ではないというか。

2015-09-16 12:30:44
なぎせ ゆうき @nagise

@gakuzzzz 人が「複雑さ」を感じるとき、いろんなパラメータが隠されていそうですね

2015-09-16 12:31:14
がくぞ @gakuzzzz

ScalaのFunctionリテラルとJavaのラムダ式を比べてもJavaのラムダ式の方が複雑なルールだと思うんだけどなぁ……

2015-09-16 12:31:23
もう疲れちゃって 全然動けなくてェ...(💉x5) @kamekoopa

何かひとつルールを導入するだけでこれだけのことが出来るんですよと言うの素晴らしいんだけど、ルールがひとつ導入されるぶん、導入しないよりは複雑になるというか。

2015-09-16 12:31:32
がくぞ @gakuzzzz

@nagise ですねー。複雑さの由来がそれぞれ違うものをぜんぶ一緒くたにしてるせいで違和感がでてるように思いました

2015-09-16 12:32:44
なぎせ ゆうき @nagise

@gakuzzzz 「複雑さ」を成分分解しようという人は少ない気がしますね

2015-09-16 12:33:13
tomo🐧@learning @cocoatomo

@gakuzzzz 個人的には apply 省略されると, どこでその省略が起きてるのか見失うので苦手です. (他の言語でも同様) apply のレシーバに自由度がある分,「これは何の apply だ?」と考えなきゃなので, そこを複雑と感じます.

2015-09-16 12:33:37
がくぞ @gakuzzzz

@kamekoopa 導入しないよりは複雑になるの確かですけど、大抵の場合、同じ事実現するのに別のめっちゃ細かいルールが大量に導入されている印象が

2015-09-16 12:34:39
もう疲れちゃって 全然動けなくてェ...(💉x5) @kamekoopa

applyが省略できるとかunapplyという名前であるルールでメソッドが実装されてるとパターンマッチでいい感じに出来るとか引数が一つだと括弧が省略できるとか高階関数の仮引数のアンスコ化のルールとかドット省略とかメソッド名セミコロン中置とか型パラメータ中置ルールとか

2015-09-16 12:34:44
もう疲れちゃって 全然動けなくてェ...(💉x5) @kamekoopa

scalaが複雑だって言われるのそういうアレコレの積み重ねのような気がする

2015-09-16 12:34:59
tomo🐧@learning @cocoatomo

@gakuzzzz よく分かってないのですが, "=>" という記号は複数の場面で異なる意味 (関数リテラルとか self-type とか) で使われるように見えるのですが, これも実は同じルールで解釈できたりするのでしょうか?

2015-09-16 12:36:17
がくぞ @gakuzzzz

@cocoatomo 括弧なしメソッドの戻り値に対してapply省略して呼び出すと、あたかも引数ありのメソッドのように見えるとかその辺ですかね?

2015-09-16 12:36:32
tomo🐧@learning @cocoatomo

@gakuzzzz そもそも呼び出し括弧の省略が苦手です. Ruby や Haskell でもよくそこで引っ掛かります.

2015-09-16 12:38:00