プログラミング言語 Scala 11冊目 [転載禁止]©2ch.net
レス数が950を超えています。1000を超えると書き込みができなくなります。
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の連載記事、各々で開かれた勉強会の資料などがあります。 すまん。仕事でイライラして難癖つけるだけのレスしちまった。
無視してくれ。 Javaはうんざりしてるので違うことやりたいと思う人にKotlinより
Scalaの方が良い点はなんだろう。
自分はScalaからKotlinに引越中だけど…。 ちょっと基本的な質問。
val a = Array("a","b","c")
a(0) = "ABC"
val は更新不可だと思ったんだが、フツーに通ったんですよ。
こりゃいったいどういうことですかね。
ちょっと不思議でして。 コップ本第3版のp.061の真ん中あたりの説明だと思うんですが、
いまいちわかんないんですよね。
ポインタ的なアレすかね。 >>857
a は Array というコンテナを他の値に変更しちゃだめだと言ってるだけで、コンテナの中身を変更
しちゃだめだとは言ってないから
コンテナの中身も変更不可にするためには、変更不可コンテナを使わないとだめ あ、なるほど、変更不可コンテナがあるんですね。
ありがとうございます。
ちょっと別件で一個、ベテランの書き方を聞いていいですか。
具体的には、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)
動くは動くんですが、もっと関数型っぽい書き方があるのではないかと思いまして。 Paizaの問題を具体例出して答えるのはまずい気がする
パターンマッチングで調べるといいよ Project AmberのおかげでますますScalaちゃんが用済みになるね
やったね! Kotlinに負けGoに負けRustに負け、勝ってたはずのJavaにすら負け
檄遅低脳コンパイラと
オタクのマウンティングのための糞記号祭りで
何もかも失ってしまったね
後に残るはPHP並の負債のみ
悲しいなぁ PHPという糞の山にScalaとかいう糞を混ぜ込んだ究極糞大山のSlackのパ●リはどうなりましたか?(凍え) コンパイル速度はdottyさんが何とかしてくれんじゃなかったっけか sbtが蛇足だった
ScalaCheckはよかった(今もあるが) >>868
それ3年くらい前から言ってない?
ドッティはドコッティ? ドッティはドコッティ?
これは流行る
糞ペチプァにすら負けたドッティはドコッティ? 自分の発言に自分でウケてやがる
アルツ一歩手前の症状だな いつの間にかverupしてるな
そして全く話題にならんという JavaのObject ArrayをscalaのArrayに変換する方法を教えてください。
Arrayには数値が入っていますが、Object型だとscalaでの計算に使用できず困っています。
Javaとの相互運用は色々と癖がありますね……。 実体が 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) >>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#から比べると難易度高いです。 最後の2行みたいな事は火種にしかならないのに
どうして書いちゃうんだろうねえ >>887
3日ほど進捗なしで心が折れてます。
getClass()でclass [Dと出るのでArrayかつDoubleのobjectのようです。
APIにはjava.lang.Objectと書いてあるのですが。
何をやってもvalue ×× is not a member of Objectと出るので
死にたくなってきました……。 とりあえずこんな風に書いてみて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) ひょっとしてこう書けば解決する話なんじゃないの
javaArray.map(Double.unbox)
それと『計算に使用できず困ってる』ってアバウトすぎてよくわからないよ >>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次元配列で戻すと書いてありますが……。 [Dはjava.lang.Double[]じゃなくてプリミティブ配列のdouble[]だよ
ScalaだとArray[Double]として変換なしでそのまま使える
まあわかりにくいよな… val obj: Object = accessor.toArray(arg0, arg1, arg2)
val array = obj match {
case double: Array[Double] => double
case _ => throw new InternalError()
} >>892
変身ありがとうございます。Object=Arrayとあるので
私も当初はそう思ったのですが、toListや配列を反転させるreverseすら通らないです。
error: value reverse is not a member of Object
下のサイトにあるような、object型配列ではないかと推測します。
https://ameblo.jp/gdgd-programmer/entry-12182237268.html あ、キャストはいるから>>893みたいにしてね
てか問題箇所のコード片貼ってもらった方が早いかな… >>893
返信ありがとうございます。
error: object java.lang.reflect.Array is not a value
とエラーが出るので、
今回の対象はjava.lang.reflect.Arrayに該当するのでしょうか。
調べてみます。 import java.lang.reflect.Array を消せ >>897=893
通りました!ObjectがArray[Double] に変わって
計算できるようになりました。
3日苦労したのが嘘のようです。
非常に助かります。ありがとうございました! Javaにかぶせたのが間違いだったな
LLVMにしとけばよかったのに scalaでforやwhileを使わずに、下記の計算をする方法、
あるいは行列用のライブラリってありますか?
1. ListやArrayの範囲指定(内容ではなく座標範囲)して抽出や計算
⇨位置指定して演算したい、画像や行列、ベクトルを想定
2. ListやArray同士の四則演算
⇨配列をベクトルや行列として取り扱いたい
pythonのnumpyやmatllab、Rのように、行列演算でscalaを使いたいと考えています。
何かお勧めがありましたらご教授いただけると嬉しいです。 調べると、ND4jやBreezeでしょうか。
後はSparkのデータフレームとか。 linear algebra libraryで調べて自分に合ったの探したら >>899
scala-nativeというものがあってだな Javaのインフラに乗っかれたのは大きかったと思うけどね
ファイルIOくらいScala側で用意して欲しいけど ファイルIOはbetter-filesが来てから何も困らなくなったな
たしかにこういうのは標準であってほしかった scalaの可視化ツールって何を使ってますか?
zeppelin かplotly辺りでしょうか。
plotlyはpytonやRと違い、
local版が見当たらないのが難しいですね。 cala用のjupter notebook やzeppelinは実質的にwindowsはインストール不能ですね。
vegasもレイアウト調整困難で可視化関係は色々厳しいです。 sbt のjarフォルダを絶対参照で書く方法ありますか?
jarが分散してるので統一したいです。 IntelliJでScala書いてるとVisual Studioの素晴らしさが身にしみるわ… 以前、>>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()が出て困っています。
型を調べて変換する方法があればご教授いただけると幸いです。
よろしくお願いします。 自己解決しました。
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()
} すみません。誰か教えてください。
Seq なり Array なりデータが 100 件あるとして、先頭20件だけとかコピーしたいんですが、どうしたらよいのでしょうか? val result =array .slice(0,20) シンボルリテラルって何のためにあるの?
使いどころがイマイチわからん scalaでコンパイラ 2.11, 2.12 みたいにバージョンでライブラリまで分けられてしまうクソ仕様いつまで続くんかな。 せっかく世間から見捨てられて実験場言語に戻れたんだからもう好きにさせてやれよ
Scala本来のあるべき形に戻ったんだよ > せっかく世間から見捨てられて
なんでそう思ってる人がこのスレを覗いてるんですかねぇ… ベターJavaの地位が揺らいでしまって何が実用面で
アピールポイントなのかよくわからん Spark用ネイティブ言語としての地位はあるでしょ。
他はKotlinに取られたようだが スカラップさあ・・・そんなニッチな需要しかないくせに
カンスーがどうのモナモナどうの偉そうにするつもりかい? バージョン間で互換性ないのってimplicitのせい? 互換テストをロクにやってないから保証できないだけ
今のScalaには新機能の開発を続けながら十分なテストを行うだけのリソースは無いし、
もはやそれを求められる立場ですらない 互換性のために
旧世代の糞APIを残し続けるJavaみたいなんも
それはそれで良くないよね バイナリ互換はMiMaでチェックするだけしゃないの?
そもそも非互換の変更を行う前提で、x.y.zのyが変わる時はバイナリ互換を維持しないって明言してるんだから
リソース云々とか一体なんの話をしてるのとしか そしてドッティでまた切り捨てるんだろ
もうペンペン草も残らねえな 知り合いが関数型言語とかモナドがとか言ってるけど
それならScala選ぶ意味わからんし
実用的な開発にどう意味があるのか説明ないし。 関数型を学ぶ効能としてよく言われる「コードが綺麗になる」というのはガチ
Javaに戻っても副作用のない小さな関数の組み合わせでコードを書くようになる
もっとも、プログラミングの地力を上げるためと割り切るならHaskellの方がいいけどね
ScalaだとJavaと同じように書けてしまうから矯正ギプスとしては効果が薄いし 関数型のキモは「汚いコードを一箇所に閉じ込める」だからな
そういうライブラリが用意されているか、プロジェクト内でそういう汚い部分を一手に引き受ける人がいれば有用
そうじゃないなら汚いコードがあちらこちらに蔓延して、関数型のメリットはないわコンパイルは遅いわで
何の役にも立たない
結局は人を選ぶ言語ってこと
誰でもそれなりに書けるPHPにはかなわない mapとreduceはデータ整形で非常に便利
これだけで使う価値はあった それだけならJavaScriptでも使ってろ
あと、やたらとreduce使いたがるのは手続き型脳から脱却できてない証拠 このところの 5ch が重かったり鯖落ちしたりというのは
5ch 自体の問題やネットワークの問題もあるが
実はアホの山下謹製専ブラ Jane Style 4.00版のせいだと判明した
これのTLS対応に欠陥があり、毎回フルハンドシェイクを行って鯖の負荷を増大させていた
その他にもツッコミどころ満載のクソソフトなので
使っている人を見かけたらすぐにゴミ箱に捨てるように言ってほしい 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
2581E レス数が950を超えています。1000を超えると書き込みができなくなります。