プログラミング言語 Scala 11冊目 [転載禁止]©2ch.net
レス数が950を超えています。1000を超えると書き込みができなくなります。
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の連載記事、各々で開かれた勉強会の資料などがあります。
0851850
垢版 |
2017/09/26(火) 11:19:35.74ID:yOG1OpGO
すまん。仕事でイライラして難癖つけるだけのレスしちまった。
無視してくれ。
0853デフォルトの名無しさん
垢版 |
2017/09/26(火) 17:40:52.02ID:O7/Ue20b
Javaはうんざりしてるので違うことやりたいと思う人にKotlinより
Scalaの方が良い点はなんだろう。
自分はScalaからKotlinに引越中だけど…。
0857デフォルトの名無しさん
垢版 |
2017/09/29(金) 00:36:14.89ID:dKsSARYE
ちょっと基本的な質問。

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

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

コンテナの中身も変更不可にするためには、変更不可コンテナを使わないとだめ
0860デフォルトの名無しさん
垢版 |
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)
動くは動くんですが、もっと関数型っぽい書き方があるのではないかと思いまして。
0861デフォルトの名無しさん
垢版 |
2017/09/29(金) 06:45:47.52ID:t98OlUL1
Paizaの問題を具体例出して答えるのはまずい気がする
パターンマッチングで調べるといいよ
0864デフォルトの名無しさん
垢版 |
2017/10/23(月) 19:51:29.08ID:1HzbJqCQ
数年前まで盛り上がってたのにね
なんでだろうね
0865デフォルトの名無しさん
垢版 |
2017/10/23(月) 20:52:53.20ID:Y0tE+5bm
Kotlinに負けGoに負けRustに負け、勝ってたはずのJavaにすら負け

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

後に残るはPHP並の負債のみ
悲しいなぁ
0867デフォルトの名無しさん
垢版 |
2017/10/23(月) 23:09:59.66ID:Y0tE+5bm
PHPという糞の山にScalaとかいう糞を混ぜ込んだ究極糞大山のSlackのパ●リはどうなりましたか?(凍え)
0871デフォルトの名無しさん
垢版 |
2017/10/26(木) 00:33:02.66ID:zsf3GtyN
ドッティはドコッティ?

これは流行る
糞ペチプァにすら負けたドッティはドコッティ?
0878デフォルトの名無しさん
垢版 |
2017/11/14(火) 13:36:02.87ID:yxhOAHxu
スッカラカン
0881デフォルトの名無しさん
垢版 |
2018/03/22(木) 03:49:55.89ID:IlQ6IwQY
別にオワコンじゃないと思うが
0882デフォルトの名無しさん
垢版 |
2018/03/22(木) 10:16:53.80ID:Q2/ylW7b
人生楽ありゃ苦もあるさ
後から来たのに追い越され
0883デフォルトの名無しさん
垢版 |
2018/03/23(金) 03:24:14.01ID:ZVKcVlB+
JavaのObject ArrayをscalaのArrayに変換する方法を教えてください。
Arrayには数値が入っていますが、Object型だとscalaでの計算に使用できず困っています。

Javaとの相互運用は色々と癖がありますね……。
0884デフォルトの名無しさん
垢版 |
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)
0885デフォルトの名無しさん
垢版 |
2018/03/23(金) 11:58:31.85ID:ZVKcVlB+
>>884
返信
0886デフォルトの名無しさん
垢版 |
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#から比べると難易度高いです。
0887デフォルトの名無しさん
垢版 |
2018/03/23(金) 13:26:03.77ID:U3ze5amU
最後の2行みたいな事は火種にしかならないのに
どうして書いちゃうんだろうねえ
0888886
垢版 |
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と出るので
死にたくなってきました……。
0889デフォルトの名無しさん
垢版 |
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)
0890デフォルトの名無しさん
垢版 |
2018/03/23(金) 14:29:48.12ID:X8WMZJVU
ひょっとしてこう書けば解決する話なんじゃないの
javaArray.map(Double.unbox)

それと『計算に使用できず困ってる』ってアバウトすぎてよくわからないよ
0892デフォルトの名無しさん
垢版 |
2018/03/23(金) 14:56:17.17ID:OzS/hjRE
[Dはjava.lang.Double[]じゃなくてプリミティブ配列のdouble[]だよ
ScalaだとArray[Double]として変換なしでそのまま使える
まあわかりにくいよな…
0893デフォルトの名無しさん
垢版 |
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()
}
0895デフォルトの名無しさん
垢版 |
2018/03/23(金) 15:34:46.78ID:OzS/hjRE
あ、キャストはいるから>>893みたいにしてね
てか問題箇所のコード片貼ってもらった方が早いかな…
0896デフォルトの名無しさん
垢版 |
2018/03/23(金) 15:35:13.84ID:ZVKcVlB+
>>893
返信ありがとうございます。
error: object java.lang.reflect.Array is not a value
とエラーが出るので、
今回の対象はjava.lang.reflect.Arrayに該当するのでしょうか。

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

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

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

zeppelin かplotly辺りでしょうか。
plotlyはpytonやRと違い、
local版が見当たらないのが難しいですね。
0908デフォルトの名無しさん
垢版 |
2018/03/28(水) 17:12:12.80ID:oZPYQnBD
おきばりやす
0909デフォルトの名無しさん
垢版 |
2018/03/29(木) 09:49:54.18ID:b5tjv35r
cala用のjupter notebook やzeppelinは実質的にwindowsはインストール不能ですね。
vegasもレイアウト調整困難で可視化関係は色々厳しいです。
0910デフォルトの名無しさん
垢版 |
2018/04/02(月) 17:22:26.88ID:NIf/Bx37
sbt のjarフォルダを絶対参照で書く方法ありますか?
jarが分散してるので統一したいです。
0912デフォルトの名無しさん
垢版 |
2018/04/04(水) 08:38:55.93ID:hBVC4rYr
何で?VS codeで書けば同じでは
0915デフォルトの名無しさん
垢版 |
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()が出て困っています。

型を調べて変換する方法があればご教授いただけると幸いです。
よろしくお願いします。
0916915
垢版 |
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()
}
0919デフォルトの名無しさん
垢版 |
2018/04/13(金) 16:04:52.02ID:YRe9q5nK
すみません。誰か教えてください。

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

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

結局は人を選ぶ言語ってこと
誰でもそれなりに書けるPHPにはかなわない
0945デフォルトの名無しさん
垢版 |
2018/04/23(月) 23:02:42.27ID:DyAAlPKR
それだけならJavaScriptでも使ってろ
あと、やたらとreduce使いたがるのは手続き型脳から脱却できてない証拠
0948デフォルトの名無しさん
垢版 |
2018/05/01(火) 09:18:03.78ID:pcuPqOhI
このところの 5ch が重かったり鯖落ちしたりというのは
5ch 自体の問題やネットワークの問題もあるが
実はアホの山下謹製専ブラ Jane Style 4.00版のせいだと判明した
これのTLS対応に欠陥があり、毎回フルハンドシェイクを行って鯖の負荷を増大させていた
その他にもツッコミどころ満載のクソソフトなので
使っている人を見かけたらすぐにゴミ箱に捨てるように言ってほしい
0950デフォルトの名無しさん
垢版 |
2018/05/23(水) 19:37:33.21ID:Au5e7VGg
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

2581E
レス数が950を超えています。1000を超えると書き込みができなくなります。

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