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

レス数が900を超えています。1000を超えると表示できなくなるよ。
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の連載記事、各々で開かれた勉強会の資料などがあります。
2017/09/22(金) 21:50:10.96ID:AwTIidLd
コンパイル遅すぎ
2017/09/24(日) 23:50:30.25ID:r21Vruvq
Dottyってコンパイル時間も早くなるんだっけ
2017/09/25(月) 01:14:08.23ID:LHq9Z9Zz
それ半年以上前から言ってるよね
本当なのかな

てかもはや
早くするのが遅すぎたね
Kotlin・・・
2017/09/26(火) 03:50:18.51ID:w3seKs+r
KotlinがAndroid公式言語になってから
すっかりScalaの勢いが衰えたな
2017/09/26(火) 06:32:14.15ID:2GJIBjiK
むしろどんどん色んなライブラリやプラットフォームができてるけど
https://scala.epfl.ch/
https://www.scala-exercises.org/
2017/09/26(火) 06:39:31.34ID:2GJIBjiK
途中送信してしまった
https://scala.epfl.ch/
https://typelevel.org/
https://www.scala-exercises.org/

コンパイラ開発やマルチプラットフォーム、マルチスクリーン、プログラミングパラダイムにドキュメント整備
いろんな方向へ発展していてたまに覗くと面白い
2017/09/26(火) 09:17:58.86ID:SmezMtDi
現実を見てない空盛り上がり
そんなこと言ったらペェチプァだった盛り上がってますわ
851850
垢版 |
2017/09/26(火) 11:19:35.74ID:yOG1OpGO
すまん。仕事でイライラして難癖つけるだけのレスしちまった。
無視してくれ。
2017/09/26(火) 15:55:40.67ID:mxjxf1zo
>>851
いいのよ
2017/09/26(火) 17:40:52.02ID:O7/Ue20b
Javaはうんざりしてるので違うことやりたいと思う人にKotlinより
Scalaの方が良い点はなんだろう。
自分はScalaからKotlinに引越中だけど…。
2017/09/27(水) 01:49:22.74ID:0UMyaADl
関数型
2017/09/27(水) 20:23:38.93ID:PWLdOFze
>>849
どんどんハッテンしてきてるね
2017/09/27(水) 20:30:38.87ID:0UMyaADl
ハッテン場っスカラ
2017/09/29(金) 00:36:14.89ID:dKsSARYE
ちょっと基本的な質問。

val a = Array("a","b","c")
a(0) = "ABC"

val は更新不可だと思ったんだが、フツーに通ったんですよ。
こりゃいったいどういうことですかね。
ちょっと不思議でして。
2017/09/29(金) 00:41:32.11ID:dKsSARYE
コップ本第3版のp.061の真ん中あたりの説明だと思うんですが、
いまいちわかんないんですよね。
ポインタ的なアレすかね。
2017/09/29(金) 01:10:02.39ID:Ngojf8tw
>>857
a は Array というコンテナを他の値に変更しちゃだめだと言ってるだけで、コンテナの中身を変更
しちゃだめだとは言ってないから

コンテナの中身も変更不可にするためには、変更不可コンテナを使わないとだめ
2017/09/29(金) 02:34:10.78ID:dKsSARYE
あ、なるほど、変更不可コンテナがあるんですね。
ありがとうございます。

ちょっと別件で一個、ベテランの書き方を聞いていいですか。
具体的には、PaizaD006とかなんですが、文字sがkmの場合、mの場合とかで数値を適当に求めるパズルなんですが、
関数言語っぽく書くとどうなるんでしょうか。
var ans = 0L
if ( s == "km") {
ans = n * 1000 * 100 * 10
} else if ( s == "m" ) {
ans = n * 100 * 10
} else if ( s == "cm" ) {
ans = n * 10
}
println(ans)
動くは動くんですが、もっと関数型っぽい書き方があるのではないかと思いまして。
2017/09/29(金) 06:45:47.52ID:t98OlUL1
Paizaの問題を具体例出して答えるのはまずい気がする
パターンマッチングで調べるといいよ
2017/10/04(水) 23:54:02.72ID:VzltHPaW
Project AmberのおかげでますますScalaちゃんが用済みになるね
やったね!
2017/10/23(月) 19:25:42.52ID:JXLQFPJl
最近ここ息してないなー
864デフォルトの名無しさん
垢版 |
2017/10/23(月) 19:51:29.08ID:1HzbJqCQ
数年前まで盛り上がってたのにね
なんでだろうね
2017/10/23(月) 20:52:53.20ID:Y0tE+5bm
Kotlinに負けGoに負けRustに負け、勝ってたはずのJavaにすら負け

檄遅低脳コンパイラと
オタクのマウンティングのための糞記号祭りで
何もかも失ってしまったね

後に残るはPHP並の負債のみ
悲しいなぁ
2017/10/23(月) 21:24:54.05ID:mFtK+01O
はいはい、そういうのいいから
2017/10/23(月) 23:09:59.66ID:Y0tE+5bm
PHPという糞の山にScalaとかいう糞を混ぜ込んだ究極糞大山のSlackのパ●リはどうなりましたか?(凍え)
2017/10/24(火) 11:19:16.35ID:/9GfC2RA
コンパイル速度はdottyさんが何とかしてくれんじゃなかったっけか
2017/10/24(火) 20:43:17.73ID:7YjoqPIK
sbtが蛇足だった

ScalaCheckはよかった(今もあるが)
2017/10/26(木) 00:32:32.61ID:zsf3GtyN
>>868
それ3年くらい前から言ってない?
ドッティはドコッティ?
2017/10/26(木) 00:33:02.66ID:zsf3GtyN
ドッティはドコッティ?

これは流行る
糞ペチプァにすら負けたドッティはドコッティ?
2017/10/26(木) 07:22:52.24ID:RVAurVuw
自分の発言に自分でウケてやがる
アルツ一歩手前の症状だな
2017/10/26(木) 14:57:19.82ID:UiPgHD+D
この言語やたら変な奴に粘着されてるな
2017/10/27(金) 06:57:47.25ID:iql/A60C
ドッティはドコッティ?
2017/11/05(日) 21:27:16.45ID:wTe1xxd0
ドッティはドコッティ?
2017/11/13(月) 22:16:12.43ID:IfkrQMwx
いつの間にかverupしてるな

そして全く話題にならんという
2017/11/14(火) 10:39:12.15ID:bpI4aGyU
どうしてこうなった
878デフォルトの名無しさん
垢版 |
2017/11/14(火) 13:36:02.87ID:yxhOAHxu
スッカラカン
2018/02/13(火) 22:37:30.82ID:FaQz+H4O
a
2018/03/03(土) 09:06:51.23ID:Jf3oQYha
これから始めようかと思ってるのにオワコンなんか?
881デフォルトの名無しさん
垢版 |
2018/03/22(木) 03:49:55.89ID:IlQ6IwQY
別にオワコンじゃないと思うが
882デフォルトの名無しさん
垢版 |
2018/03/22(木) 10:16:53.80ID:Q2/ylW7b
人生楽ありゃ苦もあるさ
後から来たのに追い越され
883デフォルトの名無しさん
垢版 |
2018/03/23(金) 03:24:14.01ID:ZVKcVlB+
JavaのObject ArrayをscalaのArrayに変換する方法を教えてください。
Arrayには数値が入っていますが、Object型だとscalaでの計算に使用できず困っています。

Javaとの相互運用は色々と癖がありますね……。
884デフォルトの名無しさん
垢版 |
2018/03/23(金) 07:02:14.80ID:X8WMZJVU
実体が java.lang.Integer[] な java.lang.Object[] を Array[Int] として扱いたいって意味なら
こんな感じでできる

val javaArray: Array[Object] = Array(new Integer(2), new Integer(3), new Integer(5))
val scalaArray: Array[Int] = javaArray.map(Int.unbox)
885デフォルトの名無しさん
垢版 |
2018/03/23(金) 11:58:31.85ID:ZVKcVlB+
>>884
返信
886デフォルトの名無しさん
垢版 |
2018/03/23(金) 12:52:48.44ID:ZVKcVlB+
>>884
返信ありがとうございました。目的はお察しの通りです。

下記のエラーで通らないようです。
missing argument list for method unbox in object Int
Unapplied methods are only converted to functions when a function type is expected.

java.lang.Objectなのは間違いないですが、java.lang.Integer[]かどうかの確認も厳しいです。
インタプリタの出力はObject = Array(数値1、数値2、……)という状況です。

Javaは型の確認や変換関係がドロドロですね……。
pythonやC#から比べると難易度高いです。
887デフォルトの名無しさん
垢版 |
2018/03/23(金) 13:26:03.77ID:U3ze5amU
最後の2行みたいな事は火種にしかならないのに
どうして書いちゃうんだろうねえ
888886
垢版 |
2018/03/23(金) 13:59:33.13ID:ZVKcVlB+
>>887
3日ほど進捗なしで心が折れてます。

getClass()でclass [Dと出るのでArrayかつDoubleのobjectのようです。
APIにはjava.lang.Objectと書いてあるのですが。

何をやってもvalue ×× is not a member of Objectと出るので
死にたくなってきました……。
889デフォルトの名無しさん
垢版 |
2018/03/23(金) 14:16:23.25ID:X8WMZJVU
とりあえずこんな風に書いてみてObjectの実体が何なのか調べてみたら

val javaArray: Array[Object] = Array(new Integer(2), new Integer(3), new Integer(5))
val objectTypes = javaArray.map(_.getClass.getName).distinct.mkString(", ")
println(objectTypes)
890デフォルトの名無しさん
垢版 |
2018/03/23(金) 14:29:48.12ID:X8WMZJVU
ひょっとしてこう書けば解決する話なんじゃないの
javaArray.map(Double.unbox)

それと『計算に使用できず困ってる』ってアバウトすぎてよくわからないよ
2018/03/23(金) 14:40:41.56ID:ZVKcVlB+
>>889
ありがとうございます。
value map is not a member of Object
でエラーになります。

関数の元は下記です。
https://www.unidata.ucar.edu/software/netcdf/java/docs/ucar/netcdf/RemoteAccessorImpl_Stub.html#toArray(java.lang.Object,%20int[],%20int[])
1次元配列で戻すと書いてありますが……。
892デフォルトの名無しさん
垢版 |
2018/03/23(金) 14:56:17.17ID:OzS/hjRE
[Dはjava.lang.Double[]じゃなくてプリミティブ配列のdouble[]だよ
ScalaだとArray[Double]として変換なしでそのまま使える
まあわかりにくいよな…
893デフォルトの名無しさん
垢版 |
2018/03/23(金) 15:11:57.52ID:X8WMZJVU
val obj: Object = accessor.toArray(arg0, arg1, arg2)
val array = obj match {
case double: Array[Double] => double
case _ => throw new InternalError()
}
2018/03/23(金) 15:22:24.34ID:ZVKcVlB+
>>892
変身ありがとうございます。Object=Arrayとあるので
私も当初はそう思ったのですが、toListや配列を反転させるreverseすら通らないです。
error: value reverse is not a member of Object

下のサイトにあるような、object型配列ではないかと推測します。
https://ameblo.jp/gdgd-programmer/entry-12182237268.html
895デフォルトの名無しさん
垢版 |
2018/03/23(金) 15:34:46.78ID:OzS/hjRE
あ、キャストはいるから>>893みたいにしてね
てか問題箇所のコード片貼ってもらった方が早いかな…
2018/03/23(金) 15:35:13.84ID:ZVKcVlB+
>>893
返信ありがとうございます。
error: object java.lang.reflect.Array is not a value
とエラーが出るので、
今回の対象はjava.lang.reflect.Arrayに該当するのでしょうか。

調べてみます。
897デフォルトの名無しさん
垢版 |
2018/03/23(金) 16:12:35.67ID:X8WMZJVU
import java.lang.reflect.Array を消せ
898デフォルトの名無しさん
垢版 |
2018/03/23(金) 17:22:45.55ID:ZVKcVlB+
>>897=893
通りました!ObjectがArray[Double] に変わって
計算できるようになりました。

3日苦労したのが嘘のようです。
非常に助かります。ありがとうございました!
899デフォルトの名無しさん
垢版 |
2018/03/23(金) 18:44:17.30ID:GtydX90K
Javaにかぶせたのが間違いだったな
LLVMにしとけばよかったのに
2018/03/23(金) 23:28:23.53ID:ZVKcVlB+
scalaでforやwhileを使わずに、下記の計算をする方法、
あるいは行列用のライブラリってありますか?
1. ListやArrayの範囲指定(内容ではなく座標範囲)して抽出や計算
⇨位置指定して演算したい、画像や行列、ベクトルを想定
2. ListやArray同士の四則演算
⇨配列をベクトルや行列として取り扱いたい

pythonのnumpyやmatllab、Rのように、行列演算でscalaを使いたいと考えています。
何かお勧めがありましたらご教授いただけると嬉しいです。
2018/03/23(金) 23:35:35.86ID:ZVKcVlB+
調べると、ND4jやBreezeでしょうか。
後はSparkのデータフレームとか。
902デフォルトの名無しさん
垢版 |
2018/03/24(土) 01:51:11.89ID:+ZOif6f2
linear algebra libraryで調べて自分に合ったの探したら
903デフォルトの名無しさん
垢版 |
2018/03/24(土) 02:21:55.05ID:+ZOif6f2
>>899
scala-nativeというものがあってだな
904デフォルトの名無しさん
垢版 |
2018/03/24(土) 04:27:50.66ID:fp6qdPf8
Javaのインフラに乗っかれたのは大きかったと思うけどね
ファイルIOくらいScala側で用意して欲しいけど
905デフォルトの名無しさん
垢版 |
2018/03/24(土) 06:42:38.90ID:+ZOif6f2
ファイルIOはbetter-filesが来てから何も困らなくなったな
たしかにこういうのは標準であってほしかった
906デフォルトの名無しさん
垢版 |
2018/03/28(水) 16:54:02.14ID:3HkPpXjY
scalaの可視化ツールって何を使ってますか?

zeppelin かplotly辺りでしょうか。
plotlyはpytonやRと違い、
local版が見当たらないのが難しいですね。
907デフォルトの名無しさん
垢版 |
2018/03/28(水) 17:10:20.55ID:3HkPpXjY
vegasを試してみます。
https://github.com/vegas-viz/Vegas/blob/master/README.md
908デフォルトの名無しさん
垢版 |
2018/03/28(水) 17:12:12.80ID:oZPYQnBD
おきばりやす
909デフォルトの名無しさん
垢版 |
2018/03/29(木) 09:49:54.18ID:b5tjv35r
cala用のjupter notebook やzeppelinは実質的にwindowsはインストール不能ですね。
vegasもレイアウト調整困難で可視化関係は色々厳しいです。
2018/04/02(月) 17:22:26.88ID:NIf/Bx37
sbt のjarフォルダを絶対参照で書く方法ありますか?
jarが分散してるので統一したいです。
2018/04/04(水) 00:45:31.75ID:T8BktjHU
IntelliJでScala書いてるとVisual Studioの素晴らしさが身にしみるわ…
912デフォルトの名無しさん
垢版 |
2018/04/04(水) 08:38:55.93ID:hBVC4rYr
何で?VS codeで書けば同じでは
2018/04/04(水) 08:46:53.46ID:v92kqTp6
>>912
ねーよ
914デフォルトの名無しさん
垢版 |
2018/04/04(水) 09:29:51.75ID:DSSSuD7V
【タンチョウから高濃度水銀】 院長「なぜアマルガムに保険適用?」 厚労省「暴動が起こるので黙秘」
http://rosie.5ch.net/test/read.cgi/liveplus/1522634813/l50
915デフォルトの名無しさん
垢版 |
2018/04/07(土) 15:55:09.31ID:Y2r5BdQK
以前、>>893さんにJavaのobject型からScalaへの型変換について教わりました。
下記がその時のコードです。
val result = object_ match {
case double: Array[Double] => double
case _ => throw new InternalError()
}
printで見る限りは Object = Array(91.0, 470.0, 4.0……とでるので
Double型と推定しますが、一部はそうではないのかInternalError()が出て困っています。

型を調べて変換する方法があればご教授いただけると幸いです。
よろしくお願いします。
916915
垢版 |
2018/04/07(土) 16:24:59.09ID:Y2r5BdQK
自己解決しました。
Object.getClass
Class[_ <: Object] = class [F
と出たのでFloatと仮定して
case float: Array[Float] => float
と書き換えた所、通りました。
本来なら下記のように併記して、どのタイプでも処理可能にしたいのですが、
配列がArray[Any]になってしまいますね……。
val result = object match {
case float: Array[Float] => float
case double: Array[Double] => double
case int: Array[Int] => int
case _ => throw new InternalError()
}
2018/04/08(日) 15:25:30.51ID:WafpiTuB
コンパイル速度はやくなった?
2018/04/11(水) 00:46:22.59ID:pVEV+BIt
社内の認証プロキシ下でsbtが使えない…
919デフォルトの名無しさん
垢版 |
2018/04/13(金) 16:04:52.02ID:YRe9q5nK
すみません。誰か教えてください。

Seq なり Array なりデータが 100 件あるとして、先頭20件だけとかコピーしたいんですが、どうしたらよいのでしょうか?
2018/04/13(金) 17:16:23.56ID:FQ6MNToH
val result =array .slice(0,20)
921デフォルトの名無しさん
垢版 |
2018/04/13(金) 20:32:41.67ID:fglus5ty
>>920
あなたは神か
ありがとう!
2018/04/14(土) 09:09:57.58ID:2Fw2P4NP
シンボルリテラルって何のためにあるの?
使いどころがイマイチわからん
2018/04/14(土) 14:21:16.76ID:4bCdNNb5
>>922
https://www.artima.com/forums/flat.jsp?forum=282&;thread=238176
924デフォルトの名無しさん
垢版 |
2018/04/16(月) 20:18:50.78ID:RnSsbo4j
scalaでコンパイラ 2.11, 2.12 みたいにバージョンでライブラリまで分けられてしまうクソ仕様いつまで続くんかな。
2018/04/16(月) 20:41:57.57ID:al53E7x7
せっかく世間から見捨てられて実験場言語に戻れたんだからもう好きにさせてやれよ
Scala本来のあるべき形に戻ったんだよ
2018/04/16(月) 20:58:45.51ID:u2yQ3H7a
> せっかく世間から見捨てられて
なんでそう思ってる人がこのスレを覗いてるんですかねぇ…
2018/04/17(火) 14:29:33.21ID:GGlFQeEw
ベターJavaの地位が揺らいでしまって何が実用面で
アピールポイントなのかよくわからん
928デフォルトの名無しさん
垢版 |
2018/04/17(火) 15:36:22.51ID:CCYPJkgd
機械学習も負けた
2018/04/17(火) 19:35:11.51ID:8EgwZBqB
機械学習で負けたってどの言語と?
2018/04/17(火) 21:27:39.93ID:rzc+g1Kj
Spark用ネイティブ言語としての地位はあるでしょ。
他はKotlinに取られたようだが
2018/04/18(水) 21:15:29.74ID:Kci/b1BD
スカラップさあ・・・そんなニッチな需要しかないくせに
カンスーがどうのモナモナどうの偉そうにするつもりかい?
2018/04/21(土) 10:10:25.37ID:c++1vlCb
バージョン間で互換性ないのってimplicitのせい?
2018/04/21(土) 11:29:41.11ID:mxPgF267
互換テストをロクにやってないから保証できないだけ
今のScalaには新機能の開発を続けながら十分なテストを行うだけのリソースは無いし、
もはやそれを求められる立場ですらない
2018/04/21(土) 12:39:30.42ID:Bnlv6NAW
互換性のために
旧世代の糞APIを残し続けるJavaみたいなんも
それはそれで良くないよね
935デフォルトの名無しさん
垢版 |
2018/04/21(土) 14:57:15.73ID:nYAa+Bsr
バイナリ互換はMiMaでチェックするだけしゃないの?
そもそも非互換の変更を行う前提で、x.y.zのyが変わる時はバイナリ互換を維持しないって明言してるんだから
リソース云々とか一体なんの話をしてるのとしか
2018/04/21(土) 17:56:20.05ID:h2C47Kaa
そしてドッティでまた切り捨てるんだろ
もうペンペン草も残らねえな
937デフォルトの名無しさん
垢版 |
2018/04/21(土) 20:56:58.42ID:iAYKxtKh
ライブラリはjavaで書いた方が良くなる
2018/04/21(土) 23:24:30.20ID:fV+lTolL
知り合いが関数型言語とかモナドがとか言ってるけど
それならScala選ぶ意味わからんし
実用的な開発にどう意味があるのか説明ないし。
2018/04/22(日) 00:08:35.02ID:9lqU/8W0
関数型を学ぶ効能としてよく言われる「コードが綺麗になる」というのはガチ
Javaに戻っても副作用のない小さな関数の組み合わせでコードを書くようになる
もっとも、プログラミングの地力を上げるためと割り切るならHaskellの方がいいけどね
ScalaだとJavaと同じように書けてしまうから矯正ギプスとしては効果が薄いし
2018/04/22(日) 00:33:07.46ID:/2pIZVDm
関数型のキモは「汚いコードを一箇所に閉じ込める」だからな
そういうライブラリが用意されているか、プロジェクト内でそういう汚い部分を一手に引き受ける人がいれば有用

そうじゃないなら汚いコードがあちらこちらに蔓延して、関数型のメリットはないわコンパイルは遅いわで
何の役にも立たない

結局は人を選ぶ言語ってこと
誰でもそれなりに書けるPHPにはかなわない
2018/04/22(日) 12:43:42.03ID:jd9SLSuF
関数型キモ
2018/04/22(日) 12:47:39.57ID:aYQdyiGw
いえてる

たしかに
2018/04/22(日) 13:07:00.07ID:jd9SLSuF
ゲリクソプェチピィに負けた気分はどうだ?
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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