1read 100read
2013年17プログラム61: プログラミング言語 Scala 9杯目 (385) TOP カテ一覧 スレ一覧 2ch元 削除依頼
【注意】STLの落とし穴【危険】 (968)
【Intel】OpenCV総合スレ 4画素目【画像処理】 (970)
機械語なら俺に質問しろ!その2 (216)
Metroスタイルアプリ開発について語れ (952)
米国国防省の標準高等言語エイダ(Ada)を語れ! (809)
Jython、Groovy、JRuby - どれが一番効率的? (277)

プログラミング言語 Scala 9杯目


1 :2013/03/30 〜 最終レス :2013/09/22
The Scala Programming Language
ttp://www.scala-lang.org/
日本Scalaユーザーズグループ
ttp://jp.scala-users.org/
■前スレ
プログラミング言語 Scala 8冊目
ttp://toro.2ch.net/test/read.cgi/tech/1335014078/
■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の連載記事、各々で開かれた勉強会の資料などがあります。

2 :
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
                  京都大学霊長類研究所

3 :
プログラミング言語「Scala」の日本初カンファレンスが開催、盛況で立ち見のセッションも
http://itpro.nikkeibp.co.jp/article/NEWS/20130329/467341/
JVM言語で生産性を向上させよう
http://itpro.nikkeibp.co.jp/article/Watcher/20130327/466368/?ST=develop&P=1

4 :
おつ階梯

5 :
scalaで作ったプログラムをexecutable jarで配布するときは、scala-library.jarも梱包しないといけないんだけど、そのときのscala-library.jarとscala-swing.jarの配布のライセンスを知りたいけど、英語が読めません
誰が和訳がどこにあるか教えてください

6 :
http://www.scala-lang.org/node/146
バイナリ形式で再配布するなら配布物のドキュメントにこのライセンス全文載っけといてよね
って感じだろうか
たぶん

7 :
>>3
itproの会員登録ってメアドの他に
何を入力させられるんですか?

8 :
勝手ながらいつもお世話になっているページをリイク。
他にお勧めあったら、おしえてね〜。
プログラミング言語Scala 日本語情報サイト
https://sites.google.com/site/scalajp/
プログラミング言語 Scala Wiki
http://www29.atwiki.jp/tmiya/
日本Scalaユーザーズグループ
http://jp.scala-users.org/
Scala開眼
http://www.h7.dion.ne.jp/~samwyn/Scala/scalaindex.htm
ひしだま's 技術メモページ
http://www.ne.jp/asahi/hishidama/home/tech/scala/
15分で始めるScala
http://xerial.org/scala-cookbook/recipes/2012/11/29/scala-in-15-minutes/

9 :
>>7
日経BP共通アカウントになるからITPro以外でも使える。
登録はメールアドレス、パスワード、名前くらいだったと思う
個人情報が気になるなら、偽名使えばいいじゃない
俺の場合メールアドレスは無料Web mail、名前は偽名
住所、電話番号、生年月日が必須なサイトでも架空のデータ

10 :
圏論とかモナドなんて簡単だからscalaを使って説明してみた
http://rirakkumya.hatenablog.com/entry/2013/03/31/191056

11 :
なるほどわからん
だがPythonのリスト内包とPHPのarray_*には殺意を覚えるほどには分かった

12 :
概念的な包含関係気にせずに
「Scala的には関手はmapでモナドから値を取り出すのはflatMapです」
と言い切ってるから素人目には良い説明なのかどうなのか判断つきません

13 :
限定的な側面だけを全体と勘違いしてる時点で理解してないだろうな

14 :
"圏論とかモナドなんて簡単だからscalaを使って説明してみた"を検証してみた
http://d.hatena.ne.jp/hiratara/20130404/1365079419

15 :
ブコメで空圏を引き合いに出して言い訳しているところが笑いどころですね
トリビアルな例だけ出してればそりゃ「圏論とかモナドなんて簡単」だろうとw
まー4月になると学術的権威主義を傘に来て新卒後輩を脅しつけるただの季節老害なんだろなと推察

16 :
「モナドという表現を(無理して)使うと、けっこうたくさんのこと(全部ではない)が統一した枠組みで表現できる」
ということを「モナドで実装すれば何かいいことがあるはずだ」と勘違いしてはいけない

17 :
AspectJみたいなかんじで
Function1とFunction2をhookしたいんだけどどうやって書けばいいの?

18 :
前スレより
____
From: [863]
scalaでDIやAOPの話聞かないなって思ってたら
traitがAOPでcake patternがDIの役割してたんですね
____
From: [864]
traitがAOPの役割するってのがよくわからないので説明して
____
From: [865]
JavaだとAOPで横断的にlogの処理とかを突っ込むのにアノテーションつけて、コンパイル前に処理しないといけない。
あれ?scalaでそういう処理ってtraitで追加するのか?
____
From: [866]
http://eed3si9n.com/ja/real-world-scala-dependency-injection-di
http://jonasboner.com/2008/12/09/real-world-scala-managing-cross-cutting-concerns-using-mixin-composition-and-aop/
ここの話だよな。
____
From: [867]
コードを折り込む部分は、AspectJの機能を使ってるのか
> parser.parsePointcutExpression("execution(* *.bar(..))")
この記事の言いたいことはaspectの記述をtraitでもできると言っているのかな
aspectとtraitはコードの再利用に特化したクラスという意味で元々似ているので、そりゃそうかなあと思った
____
From: [868]
>>865
AspectJとかJVM系のAOP実装だと
クラスのロード時にバイトコードを書き換えるので、コンパイル時には何もしなくていい
C言語ベースとかだとコンパイル時にがんばる

19 :
元々AspectJはコンパイル時に頑張るタイプだった
load-time weaveになったのはAspectWerkzと統合された後
(AspectWerkzは元々compile-time, load-time, runtime weave対応)
そのAspectWerkzの開発者だったのがAkka作者のJonas Bonér
これ豆な

20 :
Manifestって実行時型情報なの?
使ったら負けだと思った方がいいの?

21 :
おまえらは言語がどうのこうのと、グダグダ言っている間に、エロイ人は実用的なソフトをガンガン作っている。

【朗報】エロ画像を管理するソフトを作ってみた
http://www.nicovideo.jp/watch/sm20470790
→ Scalaで画像処理、画像認識して、Playで表示しているらしい。オープンソーす

22 :
2chのスレ読み込んでスレの内容で画像の内容を解読してURLから画像をダウンロードして自動でファイルのタグ付して月ごとにフォルダ管理するソフトをjavaで作った
スレの内容を判別するルールベースの部分がscalaになってる
このくらいのことなら、みんなやってる

23 :
             ____
           /      \
          / ─    ─ \
        /   (●)  (●)  \   ない ない
        |      (__人__)    |
         \     ` ⌒´    ,/
 r、     r、/          ヘ
 ヽヾ 三 |:l1             ヽ
  \>ヽ/ |` }            | |
   ヘ lノ `'ソ             | |
    /´  /             |. |
    \. ィ                |  |
        |                |  |

24 :
CUIの2chブラウザをscalaで実装した

25 :
>>24
あ、それほしい。

べ、べつに、仕事しているふりして2ch見るつもりじゃないからね!

26 :
プロポーショナルなAAはCUIではどう表示するんだろ

27 :
端末の関係で文字全部をユニコードに変換してるからAAは表示どころか文字化けしまくってる

28 :
じゃあもうしばらくはNavi2chで仕事してるふりして待つわ

29 :
Scala使ってる人は、JavaのWebフレームワークと組み合わせて
Webの開発やってる人が多いのかな?
ScalaユーザはみんなLiftとか使ってるのかと思いきや
Liftはさっぱり人気ないことに気が付いた。
Liftもドキュメント読んでもよくわからないし使いづらそう。
Play!もセッション機能がなかったりして汎用性がない。

30 :
俺はLiftでやっているよ。
railsから素直に来れないのが弱点と言うことになっているが
それ自体はたいしたことない。
それよりもドキュメントが貧弱なのがきつい

31 :
>>30
ドキュメントが貧弱、に納得。
数時間、公式サイトを読んだけど簡単なCRUDさえ作れず挫折したw
ドキュメントは概要から順に説明していくのがふつうなのに、
少し読み進めるとアクターモデルとか高度な解説はじめちゃう始末。
Lift開発者は、Railsの元・開発者と聞いて期待してたけど、
LiftとRailsでアーキテクチャがぜんぜん違うんだよね
どうしてこうなった、という感じ。
ViewFirstってわかりづらい
ドキュメントも2011年のままで、長らく更新されてないし、
Lift開発者のやる気もなくなってきてる感じがするわ。

32 :
>>29
自サーバならtomcatで問題ない件

33 :
>>32
?どういうこと?
Play!はJava EEを使ってなくてJavaのSessionに該当する機能は
使えない、とどこかで読んだ。
Play!のフレームワーク自体がステートレスに設計されてるはず

34 :
>>33
掲示板の書き込みと画像のアップロードとミニwikiとちょっとJDBC使うくらいなら、そもそもセッション使わない方が綺麗に実装できる
フレームワークに沿ってコーディングする利点がない

35 :
最近出来たwebベンチマークに
scalaからUnfilteredってのが参加してた。
速度出てるのでシンプルな感じがする。
http://www.techempower.com/benchmarks/#section=environment
- Play(play-scala) 2.1.1
- Lift 2.5.0-RC2
- Scalatra 2.2.0
- Unfiltered 0.6.8

36 :
>31
>数時間、公式サイトを読んだけど簡単なCRUDさえ作れず挫折したw
ご本尊のサンプル(http://simply.liftweb.net/)にはmodelが出てこないからな
だからこっちのサンプルを見てくれ
http://exploring.liftweb.net/master/index-2.html#toc-Chapter-2
lift-mapperの簡単な使い方が載っている。
CRUDについてはこれね
http://exploring.liftweb.net/master/index-8.html#toc-Subsection-8.2.4
で、こっちの方はsbt使っていないんで
環境はcookbookの方を見る必要がある。
http://cookbook.liftweb.net/#InstallAndRunning
俺も土曜に始めたばっかりなんで間違っていたらゴメン。
ただ、雰囲気的にDBについてはLiftはあまり関知しないつもりのように思える。

37 :
javaで作ったサーブレットと共存させながら面倒臭い部分からscalaのコードに置き換えていってるから、当分はtomcatに毛が生えたサーブレットコンテナのままです
企業とかもたいして変らわない予感がする

38 :
へ〜、ステートレスでセッションの仕組みが無いならログインとかはどう扱うのだろうと思って
調べたらSession IDを使うステートフルな認証認可モジュールが出てきた。
まぁ、そうなるかな。

39 :
ステートレスってデータを全部DBとcookieに納めて、
アプリケーションサーバがステートを持たないって意味だから
全体としてはステート自体は持つから。
単にサーバを分散しても管理しやすいってだけなんで、
どうせサーバが一台しかない小規模用途なら
lift方式はラクチンでいいと思う

40 :
>>18
↓でOdersky先生自らが DI を解説していた
http://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2012/Reflection-and-Compilers
17:13から 「Dependency Injection in Scala」

41 :
関数(主にパターンマッチ)
OOP
Eclipse
vim plugin

軽いコンパイラ書くなら scalaが最適かな、と思いました

42 :
そもそもscalacが重い件

43 :
軽く、に訂正

44 :
>35
finagleさんが、参加してた。
http://www.google.co.jp/search?q=finagle+scala
ってこれは単純にページ表示するためのものじゃない?
http://2012.8-p.info/japanese/2/18/tumblr

45 :
>>35
akkaご推奨のPlay-miniのrouteはUnfiltered前提だな

46 :
>>29
既存のjavaのフレームワークだと関数型っぽく書かなくなるんだよね
関数型なにそれ美味いの?ってなメンバーが多いときは取っ付きやすいからありだが
だったらscalaじゃなくてもよくね?になりがち

47 :
>>44
次の計測で何位まで行くかたのしみ。
https://github.com/TechEmpower/FrameworkBenchmarks/pull/245

48 :
object MainFrameSample extends SimpleSwingApplication{
def top = new Frame{
title = "Window Title"
minimumSize = new Dimension(250,400)
// cursor = new Cursor( Cursor.HAND_CURSOR)
resizable = false
menuBar = new MenuBar() {contents += new Menu("menu1")}
}
}

こういうウインドウを出すオブジェクトを別のオブジェクトから呼びたいんんですがどうすればよろしいのでしょうか?
eclipse でかいてるんですが 実行時に MainFrameSample オブジェクトを選ばないとウインドウが出てこないんです

49 :
class F extends scala.swing.Frame {
title = "Frame test"
override def closeOperation() = dispose()
}

宣言をこうして呼び出すとき

val af = new F(); af.close(); af.size = new Dimension(200,300); af.title ="XHHHHtTH"
af.visible = (true)
println("xxxxxx")


こうしたらうまくいきました
ありがとうございました

50 :
がっかりpattern matchに泣ける

51 :
メモ sbt環境で -X:print オプションつきコンパイルしたいとき
> set scalacOptions in Compile += "-print"
> compile

52 :
パターンマッチングで
string s1 を その場で定義した正規表現 r1でマッチするかどうか調べ、更にその際一部分を x,y,z に拘束しておき
マッチしていた場合 別のオブジェクトの関数 o1.f1(s,t,u )に 適用して o1.f1(x,y,z ) を評価する、ということをやりたいんですけど
scalaでできますか?

53 :
とりあえずなんでもアルファベットの後ろに数字つけて変数名にしちゃうMS文化って滅びればいいと思います

54 :
val s1 = "x=10,y=20,z=30"
val r1 = "x=([0-9]+),y=([0-9]+),z=([0-9]+)".r
object o1 { def f1(x: Int, y: Int, z: Int) = println(x, y, z) }
s1 match {
case r1(x, y, z) => o1.f1(x.toInt, y.toInt, z.toInt)
}

55 :
>>54
ありがとうございます
r1 を無名関数なので match{ } の内側で定義するのは無理なんでしょうか?

56 :
http://stackoverflow.com/questions/4636610/regular-expression-and-pattern-matching-in-scala

57 :
object o1 { def f1(x: Int, y: Int, z: Int) = println(x, y, z) }
implicit class RitchRegex(sc: StringContext) {
def r = new util.matching.Regex(sc.parts.mkString, sc.parts.tail.map(_ => "x"): _*)
}
"x=10,y=20,z=30" match {
case r"x=(\d+)${x},y=(\d+)${y},z=(\d+)${z}" => o1.f1(x.toInt, y.toInt, z.toInt)
}

58 :
typo
s/RitchRegex/RichRegex/

59 :
>58
これを見て
「>57レベルの人でも、やはり正規表現を使った操作は/〜/〜/形式が一番直感的なんだな」
と思った。

60 :
http://www29.atwiki.jp/tmiya/pages/136.html
ここにも RitchString のTypoを発見

61 :
>>57
ありがとうございます
すごすぎて
すぐには理解できませんが精進に努めます

62 :
parser combinator で
p ^^ f succeeds if p succeeds; it returns f applied to the result of p.
ってのは
f( (result of p) )

ってことですか?

63 :
だとしたら
f applied to the result of p. って
文法がちょっとおかしいような

64 :
>>62
コードで表現したいこと(意図)とScalaコードごちゃまぜにして書かれてもわからんので
せめて意図は //期待している挙動
みたいにコメントで分けて書いてくれ

65 :
「pのパースに成功したらその結果がfに適用され処理される」ということだから何もおかしくない。
case class Vector3(x: Float, y: Float, z: Float)
object SampleParser extends scala.util.parsing.combinator.RegexParsers {
def parse(in: String) = parseAll(vec3.*, in)
def vec3 = number ~ number ~ number ^^ {
case v1 ~ v2 ~ v3 => Vector3(v1.toFloat, v2.toFloat, v3.toFloat)
}
def number: Parser[Double] = """\d+(\.\d*)?""".r ^^ { _.toDouble }
}
SampleParser.parse("""
1.1 2.2 3.3
4.4 5.5 6.6
""")

66 :
^^はmap
>>はflatMap

67 :
>>63
> だとしたら
> f applied to the result of p. って
> 文法がちょっとおかしいような
日本人的には違和感あるけど
f(x)のことをf applied to x(xに適用されたf)
ということもあるようだ。

68 :
case classをextendしたcase classを作ると
applyとunappyがうまく自動生成されなくなる
(extractor書けとか言ってくる)んだけど
これはそういうものなの?

69 :
case classをextendしたくなる状況が理解できないけどそういうものです

70 :
++=
の意味がわからないです。

71 :
x ++= yはx = x ++ yと同じ

72 :
x ++ y もわかんないんですけど…

73 :
何がわかるんだ?

74 :
>>69
case class Employee(name:String, salary:Int)
みたいなのに
case class SalesRep(customers:List[C]) extends Empolyee
みたいなのってしたくないですか?

75 :
>>74
したくないです……
その例だったら
case class SalesRepo(employee: Employee, customers: List[C])
とか、単に (Employee, List[C]) のタプルで済ますとか

76 :
>>74
したいけど、それをやるとオブジェクトの等価性で問題がでるために禁止された

77 :
>>75
したくない理由をもうちょっと詳しく教えてもらえる?
こういう継承って古典的なオブジェクト志向のよく出る例だけど
なぜscalaではダメなのか?
型情報も両方で基底の型としてEmployeeを使いたいときどうするの?
それともtrait使って混ぜ混ぜの方がscalaだと流儀なの?

78 :
++ はこれですか。
http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.StringOps

79 :
>>77
Scalaではダメってわけじゃない。case classでダメなだけ
なぜならcase classは(オブジェクト指向の)抽象データ型ではなく(関数型の)代数データ型だから

80 :
代数的データ型だというならML系やHakellの用に楽に定義出来る構文糖欲しい

81 :
基底traitをsealedすればよくね?

82 :
論理的にはそれで大丈夫なんだが字面的に面倒じゃない?

83 :
慣れ

84 :
scala盛り上がってるかい?

85 :
ぷえーい

86 :
Scala 2.10.1でManifestがdeprecatedになって
scala.reflect.runtime.universe.{ typeOf, TypeTag, Type }になったけど
おかげでtype erasure回避しやすくなってるね

87 :
scalaのAndroid SDKが欲しい

88 :
>>86 試してみた。これからはshapelessなくても生きていけるかも
class HMap {
import scala.reflect.runtime.universe.{ typeOf, TypeTag, Type }
private var m = Map[String, (Type, _)]()
def set[T: TypeTag](k: String, v: T): Unit = { m += k -> (typeOf[T] -> v) }
def get[T: TypeTag](k: String): Option[T] = m.get(k) flatMap {
case (t, v) if t <:< typeOf[T] => Some(v.asInstanceOf[T])
case _ => None
}
}
scala> var hm = new HMap
hm: HMap = HMap@272772b1
scala> hm.set("hoge", 1)
scala> hm.set("fuga", "moge")
scala> hm.get[Int]("hoge")
res76: Option[Int] = Some(1)
scala> hm.get[String]("fuga")
res77: Option[String] = Some(moge)
scala> hm.get[String]("hoge")
res78: Option[String] = None

89 :
Scalaの何がいいのか産業で

90 :
Haskellは難しすぎて僕にはむりだったけど
すカラならOOPを足がかりにして緩やかにFPへシフトできるから
きっと君もスキになれる

91 :
>>89
そこそこ強力な言語だし、それに名前がかっこいい
名前がダサい言語は使う気になれん
F#とかさw
アルファベット1文字w + しゃーぷwwだっさ
エフシャープwwww恥ずかしくて口に出せない

92 :
アルファベット一文字の適用範囲的最強言語C言語様がみえないのか?w

93 :
Dの悪口はやめて

94 :
D is disrespected always.

95 :
Deprecated Language?

96 :
D言語最強伝説

97 :
ドヤ顔でDとか言ってるくせに、〜100行程度のトイコードしか書いたことのない馬鹿w
お前らがちゃんと貢献しないから、いつまで経っても5流言語なんだよ?
はやくC++を駆逐しろよ

98 :
ScalaではClojureに勝てないことに気がついてしまった・・・
今までJavaプログラマをバカにしていたが、Clojureプログラマからはバカにされてる・・・
高校生になったから調子にのって中学生を見下していたら、それを見ていた大学生に苦笑いされた
そんな気分だ・・・情けない・・・さようならScalaプログラマ()・・・

99 :
おう、じゃあな

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
プログラム関係の雑誌について (230)
iモード携帯電話用Java(iアプリ) Part22 (919)
Visual Studio 2013 (375)
【Delphi互換!?】FreePascal/Lazarus その2【GPL】 (362)
くだすれC++/CLI(初心者用)part2 (723)
C、C++の最適化について語るスレ 3 (933)
--log9.info------------------
【前田】熊本信愛女学院【西姉妹】 (573)
【予選落ちか】中央大学【予選落ちか】 (820)
競歩総合スレ (133)
★★筑波大学女子長距離ブロック応援スレ Part5★★ (517)
陸上競技関連の本、記事があったら書き込むスレ (137)
川内優輝 part17 (384)
駒澤大学part168 (931)
武井壮って本物の天才だよな (111)
【湯ったり】愛媛マラソン【オレンジロ〜ド】 (679)
400m、800m走のタイムを速くするには? (210)
【パンチラ?】中島 ひとみ【荒牧中】 (311)
月陸と陸マガのスレ★9 (412)
【風俗ラン】仮装・コスプレでマラソン大会19 (250)
鹿児島県女子長距離スレ「再起動」 (292)
【フルマラソン】 サブ4を目指すスレ part7 (189)
【中級者】10km40分を目指すスレ (881)
--log55.com------------------
【PS4】アズールレーン クロスウェーブ 【コンパ×Yostar】
【PS4/PS3/PSV】英雄伝説 閃の軌跡総合 part 684
【PS4】ゆらぎ荘の幽奈さん 湯けむり迷宮【ローグライク】
【PS4】オメガクインテットpart16
【機種】ロマンシングサガ3リマスター総合スレ【多すぎ】
【PS4/PS3/PSV】英雄伝説 閃の軌跡総合 part 691
【XboxOne】TES V:SKYRIM スカイリム16【SE】
英雄伝説 閃の軌跡 反省会スレ★47