X



プログラミング言語 Scala 11冊目 [転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2015/08/28(金) 07:25:25.39ID:YozprJV9
The Scala Programming Language
ttp://www.scala-lang.org/

日本Scalaユーザーズグループ
ttp://jp.scala-users.org/

■前スレ
プログラミング言語 Scala 10冊目
http://peace.2ch.net/test/read.cgi/tech/1390629242/

■Scalaの紹介文(さわり)
Scalaは簡潔かつ優雅で型安全な方法でよくあるプログラミングパターンを表現できるように
設計された汎用プログラミング言語です。
Scalaはオブジェクト指向と関数型言語の特徴をスムーズに統合しておりJavaやその他の言語を扱う
プログラマをより生産的にすることができます。(以下略)
ttp://www.scala-lang.org/node/25

■Scalaに関する書籍(英語)
ttp://www.scala-lang.org/node/959
リファレンスマニュアルや草稿のPDFなども充実しているのでそちらも参照してください。
日本語の資料には、チュートリアルの訳やIBM dW、IT Pro, @ITの連載記事、各々で開かれた勉強会の資料などがあります。
0080デフォルトの名無しさん
垢版 |
2015/11/01(日) 15:20:24.23ID:m5dOP02q
(javaより安全性が高い  型安全的な意味で)
つーか日本だけでもはてなやドワンゴみたいな大企業が使ってて普及してないとか言われると
微妙な気がするんだけど
アドテクでも最近流行ってるし
スピードと安全性と生産性 両立したい!みたいなところから需要がある
0081デフォルトの名無しさん
垢版 |
2015/11/01(日) 15:28:30.60ID:m5dOP02q
>>35
日本語の本だけに限ったって
scala逆引き
コップ本
fp in scala
オライリーのscala本
とかあるじゃん!

英語の本だったらライブラリやフレームワークの本含め
沢山でてるし
0082デフォルトの名無しさん
垢版 |
2015/11/01(日) 15:52:33.27ID:NUcI8Hig
Scalaの生産性が高いというのは大多数に当てはまらない虚言だろ
いくらコードが短くなると言っても覚えることが半端な量じゃない
まともに使いこなせるまで相当な学習コストがかかる
生産性が高いと言う触れ込みに飛びついて開発言語にScalaを選定し、大炎上してるプロジェクトを知ってるぞ
0083デフォルトの名無しさん
垢版 |
2015/11/01(日) 16:41:51.55ID:ZaupeU+S
Scalaは「生産性の高いJava」という方向で採用すると失敗例が多い
「型安全なPHP(もしくはnode.js、Ruby)」という方向での採用の方がしっくりくる例が多い
0084デフォルトの名無しさん
垢版 |
2015/11/01(日) 16:51:21.20ID:m5dOP02q
学習コスト

生産性
は違う気がする
生産性が高い(javaと比べて)って感じかもわからんから生産性だけを重視するならスクリプト言語の方がいい気がする
学習コストは確かに高いと思う 
特にjvmの変なところを埋めようとしてるところとか(型消去や配列周りは罠)、残念な型推論やimplicitは鬼門
うちではrubyやってた人はわりとすんなりできるようになってる印象
0085デフォルトの名無しさん
垢版 |
2015/11/01(日) 17:04:12.82ID:m5dOP02q
後 sbtがとっつきにくい 
というかアレscala結構できるようになってもキツイし初心者死ぬのにscalaやる上でほぼ必須という
<+=とか止めろ

dsl力が高いのは結構な事だけどマクロとimplicit使いまくるとすごい事になるわ
0086デフォルトの名無しさん
垢版 |
2015/11/03(火) 00:13:48.22ID:uxlxeY86
HListって色んなところで使われてるんだな
なんやねんこれ
0087デフォルトの名無しさん
垢版 |
2015/11/03(火) 01:57:08.35ID:SGr3OV6d
      ☆ チン     マチクタビレタ〜
                        マチクタビレタ〜
       ☆ チン  〃 ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        ヽ ___\(\・∀・) < Play2.5まだぁー?
            \_/⊂ ⊂_ )  \__________
          / ̄ ̄ ̄ ̄ ̄ ̄ /|
       | ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |
       | 愛媛みかん  |/
0089デフォルトの名無しさん
垢版 |
2015/11/06(金) 06:23:06.91ID:qFwSJApb
>>73
当たるか当たらないか分からないサービスに最初からscalaで書いたり、
保守性が重要な業務アプリでscalaとか違和感しか感じない
Rails, PHP, nodeで書いて、パフォーマンスが足りないような事情でもない限り、
scalaを積極的に使うだけの理由なんてないんじゃないの
0090デフォルトの名無しさん
垢版 |
2015/11/06(金) 07:18:12.28ID:Jbsw4Wxa
>>89
ええとー、nodeはどうなんだろ?
普及度はScalaよりマシって程度だし、できあがるコードはお世辞にも保守性が
高いとはいえないし
0091デフォルトの名無しさん
垢版 |
2015/11/06(金) 07:55:46.24ID:J1IjfUsv
>>90
Node.jsは敷居が低いだろう
基本的にマイクロフレームワーク使うから小さいものを素早く作る分には非常に覚えやすく見通しもいい。
Scalaは言語やフレームワークを学習するオーバーヘッドが非常に大きい上にそれらの変化も無駄に激しい。
実務で使うならそれらを受け入れるのに見合ったリターンが必要なわけ。
求められる基準点が違うんだよ。
0093デフォルトの名無しさん
垢版 |
2015/11/06(金) 08:22:39.00ID:J1IjfUsv
>>92
だから求められる基準点が違うと言っている
expressなんかサンプルコードチラ見したら使える
変わったところで大したことじゃない
0094デフォルトの名無しさん
垢版 |
2015/11/06(金) 14:25:45.36ID:rTGTpM5t
おれは型なし言語がscalaより保守性あるってのが理解できないわ。
とくにレールズなんて変化しまくりやんか
0096デフォルトの名無しさん
垢版 |
2015/11/06(金) 15:18:05.81ID:4lrqdnT0
型システムが強力なのはビジネスロジックには非常に有効だけど、
HTTPリクエストの中身を必死に型付けしようとするみたいにフロントエンドの近くで型遊びやるのは生産性下がるだけの阿呆
0097デフォルトの名無しさん
垢版 |
2015/11/06(金) 15:49:02.90ID:51omasux
そもアプリケーションがサーバーからクライアントに移っていってるんで5年10年前とは違うのだよ
0098デフォルトの名無しさん
垢版 |
2015/11/07(土) 10:17:41.48ID:kqClzOIN
>>95
ちょっとテーブルの列を追加/削除みたいな時に割りとコンパイルエラーになるのは嬉しい
保守性というより安全性か
>>96
sprayとかはHTTPリクエストの型付けを自然な感じで記述できるよ
レスポンスはjson返す事が多いからそんなに負担に感じない
0099デフォルトの名無しさん
垢版 |
2015/11/07(土) 10:23:53.11ID:kqClzOIN
scala 普通に使いこなす分にはそんなに学習コスト高いとは思わない
javaしか書いた事ないって人にはきついかも知れんけど
0100デフォルトの名無しさん
垢版 |
2015/11/07(土) 20:18:41.44ID:3iwKiLGj
数年前にもここで同じこと書いたけど
マクロやら内部DSLバリバリ使ったライブラリ書こうと思ったらしんどいけど
普通に書く分にはそんな難しいことないよな
よく言われる淫プリ嫉妬もIDE使えばどこからインスタンス供給されてるかすぐ分かるし
0101uy ◆Qawu9.2l1E
垢版 |
2015/11/07(土) 21:34:47.72ID:LOAJFMP+
他の主要言語とシンタックスがズレている事が問題だろこの言語はw

言語設計者にセンスがなかった
0103デフォルトの名無しさん
垢版 |
2015/11/07(土) 21:57:24.87ID:kqClzOIN
Martin Oderskyは Generic Javaも設計してるからもろ主要言語の人なんだけどな
型引数の[]はxmlリテラル<>を使うからだし
配列またはリストに特別なリテラル与えなかったのはコレクションを統一的に扱いたかったからだろうし
0104uy ◆Qawu9.2l1E
垢版 |
2015/11/07(土) 22:27:08.96ID:oj5NSdiM
言語が難しい?簡単?を議論される時点でもうダメ

学習コストが1日かからないような洗練された言語が数ある中で
Scalaの居場所なんてありませんよ

オワコン
0105デフォルトの名無しさん
垢版 |
2015/11/07(土) 23:06:23.35ID:vYEJsDm4
まあでも、勝手に利用者増えてってる状況だからな。
普通に学部のCS出たらML系には馴染みがあるし、
erlangから移植したものとjvmから引き継げるものがあって、さっと使えるし、監視系に強いのが利点だと思う。
goが置き換えそうな分野が増えてるけどね。
0106デフォルトの名無しさん
垢版 |
2015/11/07(土) 23:09:48.31ID:vYEJsDm4
ml系使えるならhaskellやocamlでなんで書かないのというのはあるが、そこはライブラリがあったり情報があったりなんだろうなと。
0107デフォルトの名無しさん
垢版 |
2015/11/08(日) 02:48:28.67ID:Wnkcx7Tx
Scalaは普通にオブジェクト指向言語として書ける & jvmで動きjavaライブラリが普通に使える
って点がでかい
てかscala書いててそんなに関数型プログラミング意識しないし scalazとか使うのならともかく
>>104
>学習コストが1日かからないような洗練された言語が数ある中で
そんな言語はない 
0108デフォルトの名無しさん
垢版 |
2015/11/08(日) 05:35:04.24ID:l3pcokKZ
仮に1日かからない言語があったとするとその言語の使用者は代わりがいくらでも簡単に用意できるということ
学習コストが高いというのはある意味長所だと思う

まあGoとかScalaとかHaskellとか業務系でメインじゃない言語をやってる人って
プログラミングが好きな人のイメージだから学習コストとか気にしないんじゃないかな
実際俺も実務で使わないけどScalaやり始めたし
今はScalaメインの会社に転職して楽しくコーディングしてるわ
0109デフォルトの名無しさん
垢版 |
2015/11/08(日) 10:14:00.73ID:WIQI5dDH
アセンブラとか低級言語は1日で理解できるが会得は困難
比較的高級なC++はとりあえず書けるが理解は一生かかってもできないと思う
どこまでを学習コストと見るかだな

Scalaは既存のJavaアプリの段階的移植という学習方法があるのがいい
Haskellは勉強のための勉強ばっかで苦痛だった
0110uy ◆Qawu9.2l1E
垢版 |
2015/11/08(日) 11:04:41.20ID:w/pNyAon
どうやら、

IQに差がありすぎて会話になりませんね

Scala厨はもう少し頑張りましょう
0112デフォルトの名無しさん
垢版 |
2015/11/08(日) 14:44:55.43ID:2RNLDzo4
すごいHaskellすげー面白かったぞ
パラダイムの学習以上のことをしようと思ったら苦痛そうだけど
0114デフォルトの名無しさん
垢版 |
2015/11/10(火) 00:27:23.14ID:FDGXqd+V
言語が面白いとかどんなレベルなんだよw
0115デフォルトの名無しさん
垢版 |
2015/11/10(火) 15:45:53.50ID:6XbD1nF4
本だろ
0117デフォルトの名無しさん
垢版 |
2015/12/09(水) 08:35:00.26ID:fDilOssF
haskellって圏論やらないと使えないのが痛いけど
scalaはjavaの亜種だから親しみがあっていいよな
0119デフォルトの名無しさん
垢版 |
2015/12/12(土) 11:08:21.23ID:iW7VBp1s
寧ろJavaなんかに親しんでしまった人々を哀れむ

というかScalaは「Javaでない」ところに
魅力というか存在意義があると思うんだが
ScalaはJavaの亜種って相当な皮肉に聞こえる
0120デフォルトの名無しさん
垢版 |
2015/12/12(土) 11:28:57.93ID:LWxp7tFX
JVM上で動くから、Javaのクラスが普通に使えるってだけで、全然別言語だよな
0121デフォルトの名無しさん
垢版 |
2015/12/12(土) 11:39:58.18ID:LM4caT06
Javaの資産を流用できることが最大の売りであると同時に足を引っ張ってる
おかげで仕様に不自然な制限がとても多いしライブラリもクソ使いづらい
0122デフォルトの名無しさん
垢版 |
2015/12/12(土) 12:45:22.80ID:eoIxbs5E
過去の資産使えなかったらまず始まりがないからな
C#あたりはそれだけで完結させるなら綺麗だがやはり既存のNativeコードとの連携では足を引っ張られてるしな
0123デフォルトの名無しさん
垢版 |
2015/12/12(土) 13:45:23.86ID:TykcQzq2
NashornやJRubyやOCamlJavaだとJVMで動くからJavaのクラスが使えるだけの別言語という雰囲気だが
ScalaやGroovyだとJavaとの相互運用性を念頭に設計されてて別言語っていうのにも違和感ある
0125デフォルトの名無しさん
垢版 |
2015/12/13(日) 07:41:44.16ID:ZNtKD4M4
>>124
単にJavaAPIをFFI出来るだけにJavaとの互換性限定すればJVM上でも配列や型消去も(パフォーマンス上の問題はあるが)好きにやれるんじゃないか?
0126デフォルトの名無しさん
垢版 |
2015/12/14(月) 00:24:20.24ID:ibuklJou
Scalaを勉強した感想
・複雑な処理でも簡潔に書けると謳っているが、簡潔に書けるまでにはかなり勉強が必要だと思った
・可読性なくね?
0130名無しさん@そうだ選挙に行こう
垢版 |
2015/12/14(月) 19:36:02.13ID:Z6ntNZEd
>>126
scalaで簡潔に書けないのは関数型に慣れてないだけでは?
あとちょっと勉強したくらいでその言語の可読性を語っちゃいけない
0131デフォルトの名無しさん
垢版 |
2015/12/14(月) 23:58:17.28ID:QlAHLIYt
>>126
普通に書いてる分にはそんなに可読性悪くないと思う
implicit使いまくると可読性落ちるけど
0132デフォルトの名無しさん
垢版 |
2015/12/15(火) 00:04:09.04ID:tTRjJjUN
あとあんまりにもdslっぽく書くために演算子を使いまくったり
macroに手を出したりするとわけわかめ
0134デフォルトの名無しさん
垢版 |
2015/12/15(火) 00:53:09.35ID:vRVqaoZM
>>133
むしろどのへんがScalaらしいのか教えてほしい
普通のJavaとしてはお手本のような綺麗なコードだけど、少なくとも関数型プログラミングとは言い難い
0136デフォルトの名無しさん
垢版 |
2015/12/15(火) 01:26:19.05ID:NAlzzOwp
可読性は言語自体が持つ構文にも影響されるけど
最も可読性に影響を与えるのはコードを書く人だから
twitter社のscalaのコードが読みやすい読みにくいはtwitter社のプログラマのせい
0137デフォルトの名無しさん
垢版 |
2015/12/15(火) 07:57:49.37ID:dq1yXLSb
>>127が「実世界での開発におけるScalaの正しい使い方」なんだとしたら、
一部の企業でScalaからJavaに回帰する動きがあるのも納得
これなら確かにJava8でいいね
0139デフォルトの名無しさん
垢版 |
2015/12/15(火) 12:32:36.60ID:dq1yXLSb
>>127のようなインフラに近い部分って本質的にミュータブルにならざるを得ないんだよな
それにweb系は基本的にモデルが単純であることが多く、関数型のメリットを受けづらい
関数型の真価はむしろ、見ただけで吐き気するようなクソ複雑な業務ロジックと業務フローを記述するのに発揮されると思うが
日本の大規模システム開発に果たしてそんな日が来るのかどうか
0140デフォルトの名無しさん
垢版 |
2015/12/15(火) 16:41:19.87ID:kvDOoT0H
関数型っぽいコード書けなくても
・ある程度速くて
・冗長すぎず
・Javaの資産を呼び出せる

ってだけでも使う価値あるだろ。少なくともJava直接書くよりは断然生産性がいい
0141デフォルトの名無しさん
垢版 |
2015/12/15(火) 22:19:58.18ID:QXgfrh72
ローレベルなメソッドではミュータブルに命令形的に高速に書いて、中間はイミュータブルに関数型的に書いて、その入出力をOOPでまとめるってすごくScala的だと思う
0144デフォルトの名無しさん
垢版 |
2015/12/16(水) 21:50:03.43ID:wGMv7ZuK
速度の要求厳しくなければ細部もイミュータブルに書けるし、開発者がHaskellやML系での設計に慣れてればクラスは単にモジュールとしてだけ使えるかな
0146デフォルトの名無しさん
垢版 |
2015/12/17(木) 08:26:22.18ID:nE3SkfcG
技術に拘る意識高い系って業務から逃げちゃうからなあ
そういう連中が積極的に業務に向き合えば関数型バリバリ使ってWebなんかよりよっぽど面白い世界になりそうだけど
0147デフォルトの名無しさん
垢版 |
2015/12/17(木) 15:54:44.26ID:JPaEl+Ww
関数型って要はモナドだろ?みんながアレを使いこなせることはこの先ないだろうな。
関数型ブーム来てるけど、けっきょく高階関数が便利とかイミュータブルにしようとか、当たり前のことだけで落ち着くだろうな
0148デフォルトの名無しさん
垢版 |
2015/12/17(木) 19:30:28.55ID:26mXuTjH
haskellこそが関数型言語だっていう風潮どうなのよ
遅延評価かつ副作用をモナドに閉じるって関数型言語一般の話じゃない
0149デフォルトの名無しさん
垢版 |
2015/12/17(木) 19:45:29.27ID:o180MFzD
まぁそうだけど、じゃあ関数型一般に特有なのはなんだ
最近の言語はラムダくらい使えて当たり前だし
0150デフォルトの名無しさん
垢版 |
2015/12/17(木) 20:09:47.72ID:26mXuTjH
147のとパターンマッチと型推論と型安全で当たり前に便利でも十分だとおもう
0151デフォルトの名無しさん
垢版 |
2015/12/17(木) 20:15:16.06ID:BcK+i/Ip
>>147
maybeモナドやlistモナドあたりに限って言えば全然難しくないので広まるのでは
特にmaybeモナドがないプログラミングはもう考えられないっていうレベルで便利だし
>>149
関数型の定義が曖昧だから再代入禁止にして高階関数使ってイミュータブルコレクション使えば
もう関数型でいい気がするけど最近のオブジェクト指向言語大体揃えてる気がする。。
ml系になってしまうけど代数的データ型、パターンマッチ、型クラスあたり・・?
0153デフォルトの名無しさん
垢版 |
2016/01/17(日) 21:20:03.61ID:6oiqScYX
モナドみたいな汚いハックが持て囃されるうちは関数型は主流にはなれないよね
関数型の実用的なメリットはその宣言性の高さなのに
それを損なうことがカッコいいみたいな空気は気に入らない
0154デフォルトの名無しさん
垢版 |
2016/01/17(日) 23:57:12.78ID:komzhbr6
純粋なオブジェクト指向が主流になったことがないように
関数型が主流になることはないだろうし
仮に関数型が主流になったところで
Scalaがその筆頭になることはないから安心しろ
0155デフォルトの名無しさん
垢版 |
2016/01/18(月) 07:09:36.14ID:fb3J4oW9
C#だと最近null propagation operatorっていう演算子が入って
mayBeNull() ?. nullの場合 .? 単に .? nullが .? 返る();
みたいな書き方でMaybeモナドのようなことを実現できるようになったけど
これ自体がイケてるかどうかは別にして、本来プログラミング言語が目指すべきところはこっちだと思うんだよね
それを安易にハックに頼っちゃうと際限なく複雑になってしまう
0156デフォルトの名無しさん
垢版 |
2016/01/18(月) 23:13:47.46ID:HgVFfOde
>>155のいう「ハック」って何なんだろう?
モナドは数学的バックグラウンドがある理論なんだけど…
0157デフォルトの名無しさん
垢版 |
2016/01/18(月) 23:36:09.36ID:kgzqpMhC
関数型で文脈を記述するDSLを実現する「ハック」だな
こういう言語内言語みたいなのは進化の過渡期にありがちな状態で、いずれ言語本体に自然な形で統合されていく
0158デフォルトの名無しさん
垢版 |
2016/01/18(月) 23:58:54.60ID:sxAam2+1
プログラミング言語がどんなに進化しようとも
それを扱う人間の質が変わらないのなら
0159デフォルトの名無しさん
垢版 |
2016/01/19(火) 07:20:59.22ID:i1u/RpO5
進化というより再定義だな。
モナドを言語に統合していけば、結局は関数型言語の中に従来の手続き型言語に似たものが同居する形に行き着くはず。
そうなったところで実質何も変わらないが、ガチ関数型信者連中にとっては関数モデルが基礎になっていることが重要なんだよ。
0160デフォルトの名無しさん
垢版 |
2016/01/19(火) 17:34:14.29ID:IRtxNT/4
>>155
なんか色々勘違いしてるようだけどそれmonadじゃなくてただのfunctorじゃね?
ハックが云々って言ってもmonadってただの型クラスなのですごい特別なものでもないし
do構文やfor式が嫌いなら>>=やflatMapを使えばいいし
>>157
monadを使えば文脈を表せるっていうけど別にListやOptionやTry(モナド則満たさないけど)使う時は意識しないし
多くの純粋ではない関数型言語では状態やIOをそのまま使えばいいわけで
0161デフォルトの名無しさん
垢版 |
2016/01/19(火) 17:45:14.03ID:IRtxNT/4
>>160
>モナドを言語に統合していけば、結局は関数型言語の中に従来の手続き型言語に似たものが同居する形に行き着くはず。
maybeやeitherはどうするんですかね
ていうかfunctorやapplicativeを言語を統合するみたいな話と同じなので意味がよく分からん
STArrayやSTRefやIO Monadが汚いハックってんならわからんでもないけど
普通の関数型言語では使わないし
>そうなったところで実質何も変わらないが
純粋な関数から副作用がある関数を呼べないという点が違う(unsafePerformIO? 知らんな)
0162デフォルトの名無しさん
垢版 |
2016/01/19(火) 17:57:56.52ID:IRtxNT/4
>>155
あ ごねん勘違いしてた
途中でnull返ったら全体がnullになるのね
でもnullableかどうかを型で表せないからっぽい?ので やっぱmaybe monadより力が劣ると思う
mayBeNull() ?. nullが返らないと思ったけどnullだった . 返る(); // ぬるぽ
nullの為に特殊な構文を導入するよりかはmonadのほうがいいと思う
0163デフォルトの名無しさん
垢版 |
2016/01/20(水) 23:33:59.18ID:YNTp5hgV
155が言いたいのはモナドも模倣するような機能が、後から入ってくるのがハックってことでは?
0164デフォルトの名無しさん
垢版 |
2016/01/23(土) 14:39:30.69ID:NoyNaMdb
Scalaでモナドのような型クラスを使おうとするとimplicit conversionを使ったりしなきゃ
いけないのが汚いということなのかなぁ?
いやでも>>153で関数型全体の話をしてるから、Haskellみたいに型クラスを普通に
扱える言語もあるから違うか

それとも単純にモナドのような強烈な抽象化が生理的に受け付けないだけなのかなぁ?
0165デフォルトの名無しさん
垢版 |
2016/01/23(土) 16:50:24.89ID:Q6XJFQjz
状態扱うのに、参照透明でも手続き型を模倣した方法使い始めると、そのうち管理しきれなくなるとかそういうのはないの?
0166デフォルトの名無しさん
垢版 |
2016/01/23(土) 18:22:32.33ID:KCwna5vH
状態を濫用すると結局手続き型と等価になっちゃうだけだよ
相当慎重に作らないとあっという間に大部分の関数がモナドで汚されてしまう
0167デフォルトの名無しさん
垢版 |
2016/01/25(月) 00:10:54.02ID:ZrKcoj3n
chainer とかの backward って勾配を計算してるんだから、実際自動微分だと思ってたんだけど違うの?
Theano も同じことやってるだろ?
0169デフォルトの名無しさん
垢版 |
2016/01/25(月) 22:48:18.30ID:w3dq64Gi
ほんとだよ
0170デフォルトの名無しさん
垢版 |
2016/01/29(金) 00:50:37.57ID:klBArT7P
Scala開発にはどのIDEがいい?
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況