プログラミング言語 Scala 8冊目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2012/04/21(土) 22:14:38.18ttp://www.scala-lang.org/
日本Scalaユーザーズグループ
ttp://jp.scala-users.org/
■前スレ
プログラミング言語 Scala 7冊目
ttp://toro.2ch.net/test/read.cgi/tech/1315134454/
■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の連載記事、各々で開かれた勉強会の資料などがあります。
0153デフォルトの名無しさん
2012/06/30(土) 16:38:33.30if start > end: return -1
0154デフォルトの名無しさん
2012/06/30(土) 16:43:51.38うーんw からかわれてるんだろうなぁw
「Pythonのグイド・ヴァンロッサム氏へのインタビュー」
で検索してくれ。ただ、読んだとしても、インデントの話
じゃない?と思うのかなぁ。
そもそもCやJavaでも「1行if」推進派の方だったら、何言って
も理解されないとは想像しますw
0155デフォルトの名無しさん
2012/06/30(土) 18:57:12.08次の行が実行文と間違う人がいると思ってるからなのか?
だとしたら相当なfoolproofだな
0156デフォルトの名無しさん
2012/06/30(土) 19:21:05.05Pythonのことはよくわからんからなー
Rubyの後置ifは許されるのかしら?
elseがないifとかありえんだろうという関数型的な話ではないよな
Cなら単体のifでも絶対に中括弧で囲むというコーディングルールはあると思う
0157デフォルトの名無しさん
2012/06/30(土) 19:56:01.91読みやすいという答えに何かご不満でも? 私は至極もっともな理由だと思うよ。 コードの読みやすさを気にしないだ
ろうか? 正しくインデントされていないコードは嫌では? インデントを文法の一部にすることで、すべてのコードが適
切にインデントされることを保証できる。 かっこを用いる場合だが、その置き方にいくつかの流儀がある。 つまり、
開きかっこをifと同じ行におくか、それとも次の行にか? 次の行だとして、インデントするか、しないか? 閉じかっこも同様。
もしどれかの流儀に慣れると、他の流儀は読みにくくなり得る。 コードをざっと読む場合、多くの人はいずれに
しろインデントを頼りにするので、 これはしばしば次のようなバグを見落とすことにつながる。
if (x > 10)
x = 10;
y = 0;
ifが式でさらに副作用をなるたけ嫌うscalaじゃ書かなそうなコードかな〜?
0158uy
2012/06/30(土) 23:57:00.530159デフォルトの名無しさん
2012/07/01(日) 09:36:43.61Cで一行からでも{}付ける習慣があるのはは
ぶらさがりelse/elseifの問題があるからだな
0160デフォルトの名無しさん
2012/07/01(日) 10:12:35.69言ってることが矛盾してるんだよな。
Pythonだと、
if x > 10: z = 1
と書いても、
if x > 10:
x = 10
y = 0
と書いても、
バグの見落としにならないし、
if x > 10: z = 1
x = 10
と書く香具師がいたらそれはただの馬鹿だし、
if x > 10: z = 1
x = 10
の二行目をifの続きだと思う香具師も馬鹿。
0161デフォルトの名無しさん
2012/07/01(日) 10:14:46.550162デフォルトの名無しさん
2012/07/01(日) 10:32:33.93こうぐし 工具 師
工具を使う職人、つまりココではプログラマの事を馬鹿にした表現
0163デフォルトの名無しさん
2012/07/01(日) 13:40:35.71古語みたいなもんだから、気にしなくていいよ
0164デフォルトの名無しさん
2012/07/01(日) 15:01:31.910165デフォルトの名無しさん
2012/07/01(日) 15:04:36.39奴 -> ヤツ -> ヤシ -> 香具師
こういう単語使う人って、10年後くらいにもまだScalaやってたりするのかな
0166デフォルトの名無しさん
2012/07/01(日) 21:06:57.17...早いな〜
2002〜2012と、2012〜2022だと後者は前者ほど劇的な変化はコンピュータ的にはなさそうな気がする
0167デフォルトの名無しさん
2012/07/01(日) 21:37:31.79C#がうまくいったのと、JavaScriptとObjective-Cが墓から蘇ったくらいで
あとはRails人気でRubyが普及したとかか
Pythonは2002年には既にある程度人気あったはずだし
0168デフォルトの名無しさん
2012/07/02(月) 11:42:53.39Jobs が死んだからな
0169uy ◆pdu1UZmweE
2012/07/03(火) 11:28:15.45そもそも技術は既に開発されていて、知ってる奴は昔から知っている
知ってる奴からすればああようやく流行ってきたかおせーなって程度だろ
一般浸透してゴミッカスドカタ共がその利点を理解し
使うかどうか
人海戦術を嫌う奴は多いけど、結局最後は人の数
どんな優れた技術も理解する奴が少ないと流行らないから
ゴミカス共が理解できる範囲のレベルの技術が流行り、
なんかそこで意味わからない方法で、効率の悪いプログラミングを、効率をよくしようと努力したのが
C#.NET まさにドカタの為のドカタ言語
Scala(笑)
0170デフォルトの名無しさん
2012/07/06(金) 21:01:30.11この本買った。DSLでScalaは真価を発揮、に同意。
1章冒頭の「ホイップをトッピングしたグランデサイズの
スキニーシナモン・ドルチェ・ラテ」の(自然言語と
しての)DSL具合に笑った。
0171デフォルトの名無しさん
2012/07/08(日) 22:33:58.46また戻ってきてよ
0172デフォルトの名無しさん
2012/07/08(日) 23:01:50.33単に話すことないだけでは
0173デフォルトの名無しさん
2012/07/08(日) 23:21:22.170174デフォルトの名無しさん
2012/07/09(月) 01:52:58.20int hoge, hage[3] = { 1, 2, 3 }, huge = 5;
をパースする例とか、どっかないですか?
0175デフォルトの名無しさん
2012/07/09(月) 10:42:24.72case class IntDef(name: String, value: Int)
case class IntArrayDef(name: String, value: IndexedSeq[Int])
object HogeParser extends JavaTokenParsers {
lazy val parse = "int" ~> repsep((defIntArray | defInt), ",") ~ ";"
lazy val defInt = ident ~ ("=" ~ wholeNumber).? ^^ {
case ident ~ None => IntDef(ident, 0)
case ident ~ Some(_ ~ default) => IntDef(ident, default(0).toInt)
}
lazy val defIntArray = ident ~ "[" ~ wholeNumber ~ "]" ~ ("=" ~ "{" ~> repsep(wholeNumber, ",") <~ "}").? ^^ {
case ident ~ _ ~ size ~ _ ~ None => IntArrayDef(ident, IndexedSeq.fill(size.toInt)(0))
case ident ~ _ ~ size ~ _ ~ Some(defaults) => IntArrayDef(ident, defaults.map(_.toInt).toIndexedSeq)
}
def apply(str: String) = parseAll(parse, str)
}
scala> HogeParser("int hoge, hage[3] = { 1, 2, 3 }, huge = 5;").get
res1: HogeParser.~[List[Product with Serializable],String] =
(List(IntDef(hoge,0), IntArrayDef(hage,Vector(1, 2, 3)), IntDef(huge,5))~;)
0176デフォルトの名無しさん
2012/07/09(月) 10:44:00.88- lazy val parse = "int" ~> repsep((defIntArray | defInt), ",") ~ ";"
+ lazy val parse = "int" ~> repsep((defIntArray | defInt), ",") <~ ";"
0177デフォルトの名無しさん
2012/07/09(月) 15:10:54.63https://gist.github.com/3074485
0178デフォルトの名無しさん
2012/07/09(月) 21:14:50.78ありがとうございます!理解するのに時間掛かってお礼遅れましたすいませんorz
調べてみて何となくボヤっと分かった気がする部分
1.identやwholeNumberって何だろ?
JavaTokenParsersで定義されてるパーサ?
2.Some不思議!
(~>|<~)とかで捨てられなかった部分が引数に渡される?
1, 2, 3とかは自動的に文字列のリストになる?
3.lazy val types = "int|string".rとか追加するとstring hoge;とかもパースできる
解決できなかった部分
int hoge = 5;<OK! int hoge = "test";<NG!
string hoge = "test";<OK! string hoge = 5;<NG!
ってするにはどうすればいいか?
http://ideone.com/mRyvb
0179デフォルトの名無しさん
2012/07/09(月) 22:28:35.80typesでまとめ上げてしまったら後に続かないから詰む
def definitions = (defInt | defString).*
def defInt = "int" ~ ...
def defString = "string" ~ ...
0180デフォルトの名無しさん
2012/07/09(月) 22:48:20.81あっ、なんか天啓来たかも?
頭から順番に自分が食べられる部分だけ食べたら残りを次の子へ渡して
次の子も頭から自分が食べられる部分だけ食べて残りを次へってバケツ
リレーみたくなってんのかな?
それで食べ残しがなくなったら、全部パースできてる的な?
そんな都合よくはいかない?まだモヤっとしてるけど、なんか取っ掛かり
がみつかった気がする。深く深く感謝です!
0181デフォルトの名無しさん
2012/07/10(火) 13:55:20.440182デフォルトの名無しさん
2012/07/10(火) 22:37:11.480183デフォルトの名無しさん
2012/07/10(火) 23:04:01.390184デフォルトの名無しさん
2012/07/11(水) 12:13:38.370185デフォルトの名無しさん
2012/07/12(木) 01:23:44.84コップ本の次に読む本としてはいいかもしれない
Scalaで何ができるのかというのがわかる
個人的にはもっとカタログ的なライブラリの比較みたいなのが欲しかったかな
どのライブラリ使ったらいいか悩んだりするから
でもさ、本が出るたびに思うけど、前半のScala入門の話とかいる?
「varとvalの違いを知りたい」とかさ、
たぶん日本で出てる全部のScalaの本に書いてあると思うんだけど、まだ書く必要あるの?
0186デフォルトの名無しさん
2012/07/12(木) 01:27:31.650187デフォルトの名無しさん
2012/07/12(木) 04:02:22.22Eclipseのプラグインの方はただInstall new softwareから引っ張ってきただけなんだけどエラー吐く。
どういうこっちゃ
0188デフォルトの名無しさん
2012/07/12(木) 04:24:56.140189デフォルトの名無しさん
2012/07/12(木) 05:46:19.730190デフォルトの名無しさん
2012/07/12(木) 23:22:41.39おまいら参加する?
0191デフォルトの名無しさん
2012/07/12(木) 23:35:44.95まあどうせHaskellの連中がデカい顔するだろうから行かないけど
0192デフォルトの名無しさん
2012/07/12(木) 23:40:34.480193デフォルトの名無しさん
2012/07/12(木) 23:44:47.64奴らはマクロしか取り柄ないし
異様なimmutable推しのClojureはちょっとやっかいだが
0194デフォルトの名無しさん
2012/07/12(木) 23:45:38.77CLOSもあるよ!
0195デフォルトの名無しさん
2012/07/12(木) 23:46:42.350196デフォルトの名無しさん
2012/07/12(木) 23:46:52.000197デフォルトの名無しさん
2012/07/12(木) 23:48:27.310198デフォルトの名無しさん
2012/07/13(金) 08:30:25.110199デフォルトの名無しさん
2012/07/13(金) 10:14:52.64よくできてるネタじゃないか
Twitterあたりでやるべきだったな
0200デフォルトの名無しさん
2012/07/13(金) 23:58:03.360201デフォルトの名無しさん
2012/07/14(土) 00:35:10.060202デフォルトの名無しさん
2012/07/14(土) 08:48:59.010203デフォルトの名無しさん
2012/07/14(土) 11:29:08.780204デフォルトの名無しさん
2012/07/14(土) 20:32:41.31cygwin
GNU Emacs 24.1.1
scala2.9.2
ensime_2.9.2-RC1-0.9.3.RC4
sbt
上記の環境で、M-x ensimeすると
Failed to connect to Swank: server process exited.
と出てきます。
参考になりそうなサイトはあったのですが、よくわからなかったです。
そのサイト
ttp://jutememo.blogspot.jp/2010/12/meadow-scala.html
一応パスまでに空白はありません。
どなたか解決策わかる方いますか?
0205204
2012/07/15(日) 06:09:12.17ところで、scalaってコンパイラ完璧ではない?
object Main {
def main(args: Array[String]) = {
val l = List(1, 2, 3)
l.map(x => x * 2)
}
}
だと"Editor does not contain a main type"ってエラー吐かれ
object Main {
def main(args: Array[String]) = {
val l = List(1, 2, 3)
l.map(x => x * 2)
print(l)
}
}
だと動作する。
0206デフォルトの名無しさん
2012/07/15(日) 06:48:27.20上は def main(args: Array[String]): List[Int]
下は def main(args: Array[String]): Unit
あとはわかるな?
0207デフォルトの名無しさん
2012/07/15(日) 07:05:28.42おうふ!セックス!
そっか、戻り値は最後のアレだっなー。
そっかそっかー。
0208デフォルトの名無しさん
2012/07/15(日) 09:22:19.340209デフォルトの名無しさん
2012/07/15(日) 09:58:04.91つまらないところでハマる。
おまけにそれを他人のせいにする。
0210デフォルトの名無しさん
2012/07/15(日) 13:38:05.030211デフォルトの名無しさん
2012/07/15(日) 17:28:40.95それでハマって無駄にする時間を天秤にかけたら、どちらがいいかは明らかだな。
0212204
2012/07/15(日) 19:59:11.38= {
以外で便利な表記法あるっけ
0213デフォルトの名無しさん
2012/07/15(日) 20:16:31.12foo() {
}
とすれば、
foo(): Unit = {
}
になるとマジレス。
某実践プログラミングでは、今回の件の逆の間違い
(なぜか最後の値が返らずにUnitになる)を防ぐために非推奨にしてたけどね
0214204
2012/07/15(日) 21:16:42.12慣れが必要だなぁこの言語。
楽しんでみるよ!
0215デフォルトの名無しさん
2012/07/15(日) 21:32:20.41http://docs.scala-lang.org/style/types.html
自分はこっちの方が分かりやすいし短くなるから :Unit = つけるより好き
0216デフォルトの名無しさん
2012/07/15(日) 22:01:31.76そんなもん検出できるからどっちでもいいだろ
0217デフォルトの名無しさん
2012/07/16(月) 10:04:36.74そんなこと言ってるのか?
0218デフォルトの名無しさん
2012/07/18(水) 19:37:38.48http://www.infoq.com/jp/articles/java-8-vs-scala
0219デフォルトの名無しさん
2012/07/18(水) 23:12:06.390220デフォルトの名無しさん
2012/07/19(木) 00:27:26.480221デフォルトの名無しさん
2012/07/19(木) 01:52:16.140222デフォルトの名無しさん
2012/07/24(火) 02:51:22.65http://www.startup-dating.com/2012/07/developer-programming-languages/
どうせScalaなんか入ってないんだろうなと見てみたら
思いっきり入ってて逆にどうかと思ってしまった
0223デフォルトの名無しさん
2012/07/24(火) 05:30:18.68金融なんかは非プログラマがプログラミングを強いられる場面が多いんじゃね?
っで、これまでだと簡易言語を導入してたけど、今時はDSLに置き換わってる
のかな?って気がする。
0224デフォルトの名無しさん
2012/07/24(火) 09:54:34.06なぜ次に学ぶ言語は関数型であるべきか
http://ymotongpoo.hatenablog.com/entry/20111105/1320506449
0225デフォルトの名無しさん
2012/07/24(火) 22:30:58.08scalaのオンライン授業がもうすぐ始まるよー
0226デフォルトの名無しさん
2012/07/25(水) 14:54:24.32今年か来年頭には有名企業からも採用事例としてプレゼン資料というか、勉強会資料が続々でてくると思う
もちろんscalaエンジニアの募集もね
0227デフォルトの名無しさん
2012/07/25(水) 16:00:24.84なんでいつも求人がないのよ…?
来年っていつの来年よ?
0228デフォルトの名無しさん
2012/07/25(水) 21:44:41.56派遣会社は意外にめざといな
http://www.indeed.com/jobs?q=scala
http://www.linkedin.com/jsearch?keywords=Scala&searchLocationType=I&countryCode=us&trk=skills
http://careers.stackoverflow.com/jobs/tag/scala
scalaやhadoop、awsで外資系にとらばーゆするチャンスではある。
http://www.itjobswatch.co.uk/jobs/uk/scala.do
0229デフォルトの名無しさん
2012/07/28(土) 15:25:04.64期待しているのとは違う挙動をするんですが、なぜなんでしょう?
環境: Scala version 2.9.1.final (OpenJDK Server VM, Java 1.6.0_24).
■. tupleからunpackingして変数宣言
scala> val (X, Y) = (1, 2) // 変数名が大文字の時はエラー
<console>:8: error: not found: value X
val (X, Y) = (1, 2)
^
<console>:8: error: not found: value Y
val (X, Y) = (1, 2)
^
scala> val (x, y) = (1, 2) // 変数名が小文字の時は問題無し
x: Int = 1
y: Int = 2
0230229
2012/07/28(土) 15:26:35.14scala> val (X, _, _) = (1,2,3) // X の型が Tuple1[Int] になってしまう
scala> X
res1: (Int,) = (1,)
scala> val (x, _, _) = (1,2,3)
x: Int = 1
scala> x
res2: Int = 1
■. パースに失敗してる?
scala> val (X: Int, _, _) = (1,2,3)
<console>:1: error: ')' expected but ':' found.
val (X: Int, _, _) = (1,2,3)
^
scala> val (x: Int, _, _) = (1,2,3)
x: Int = 1
0231デフォルトの名無しさん
2012/07/28(土) 15:55:07.50val の後にタプルを書いた場合はパターンマッチと見なされるが、
パターンマッチの中では大文字で始まる識別子は変数ではなく定数と見なされるから。
つまり最初の例では 1 を定数 X とマッチングしようとして、X が見つからないのでエラーになっている。
どうしても大文字の変数名を使いたければ
val t = (1, 2)
val X = t._1
val Y = t._2
のようにするしかない。
0232229
2012/07/28(土) 16:08:33.29ありがとうございました、おかげですっきりしました
0233デフォルトの名無しさん
2012/07/28(土) 21:44:55.90すっかり忘れてた。勉強になったわ。�dクス
0234デフォルトの名無しさん
2012/08/01(水) 00:52:49.71って表現のHolder[X]の部分がなんなのかよくわかりません
0235デフォルトの名無しさん
2012/08/01(水) 02:05:10.090236デフォルトの名無しさん
2012/08/01(水) 13:03:13.45格安iPhoneEラーニング(学習動画多数あり)
http://tinyurl.com/7wj77om
コワーキングスペースJP
http://tinyurl.com/76vdrny
コワーキング帳
http://tinyurl.com/brzs486
javaやlinuxは手間がかかる 一人でやるには手間がかかりすぎる 手間がかからないで一人で開発できて
人の多いところで直接販売できる仕組みが提供されているメーカ製言語だけやる ずばりiphone またはWindow 8 Metro App Store C#
やるならメーカー製の言語 洗練された仕様 脆弱性が少なく 開発ソフトが優れ 課金ライブラリ アップデートライブラリが提供されていて 情報、書籍が多く開発しやすい
奴隷になりたければオープン系をやればいい 時間がかかり 人は多く 仕事の取り合い 足の引っ張り合い 脆弱性が多く 互換性がなく 癖があり 大規模開発中心
詳細設計しかやれない体になって年取ってぽいだ 独立もできない 手間のかかりすぎる仕様だから
派遣屋 IT経営者はその方が喜ぶ 大規模分割開発では使い捨てても独立はできまい 代わりはいくらでもいる 嫌なら辞めろ
若い派遣営業は舐めた態度をとってくる ひどいピンハネ
オープン言語、日本独自開発の言語・フレームワーク ガラパコ携帯 javascript html5 android java linux python rubyやnode.jsとかやめとけ
メディアに金を払ってステマ宣伝してくるが釣られて手を出しても情報は少なく手間がかかり スパゲッティコード 未完成 デスマに陥る
コンパイルできないからパクられ 直接売る場所がないから企業に買い叩かれ金にならない 生きていけない奴隷仕様だ
0237デフォルトの名無しさん
2012/08/01(水) 13:03:50.36Objective-CやC#を覚えるとサーバーサイドからクライアントサイドまでカバーでき人の多い場所でソフトを売る権利を得られる
仕事や趣味でObjective-CやC#をやっておけば派遣切りされても会社辞めることになってもソフトを売って生きていける それはセーフティーネットになる
WEBサーバーIIS Win2008ServerVPS SqlServer Oracle MySql 言語はマーケットで売れるメーカー製のみ C#は自分用業務支援ツールとして使える
例えばPHPでWEBアプリを作っていて管理者画面はC#(EXEアプリ)で作るとかなり早く作れる(Smartyなんか使うよりもかなり早くだ)
C#のソースを出さなければWEBアプリの著作権も守れる ASP.net(C#)+管理EXEアプリ(C#)+iPhone
C#マーケット Windows8 Metroアプリ WindowsPhone Surface PS Vita Xbox360 iphone(mono使用)
iPhoneマーケット iPhone iPad 予定 iTv iCar i (家電製品)
地方に安い土地を買いコンテナ型の格安高性能オフィスを建て(300万〜500万)
レンタル自習室&シェアオフィス・コワーキングで収入を得ながらそこでアプリを開発する
http://tinyurl.com/7pb2yaa
http://bit.ly/iLIpJa
0238デフォルトの名無しさん
2012/08/01(水) 13:10:22.940239デフォルトの名無しさん
2012/08/01(水) 13:25:18.46ここから抜け出すにはiPhone一択?
じゃあScalaでAndroidアプリ作ればいいんじゃないかな(´・ω・`)
0240デフォルトの名無しさん
2012/08/01(水) 13:37:20.52されに関しては同意だ。
0241デフォルトの名無しさん
2012/08/01(水) 13:37:20.770242デフォルトの名無しさん
2012/08/01(水) 21:48:10.25って表現のHolder[Z]の部分がなんなのかよくわかりません
0243デフォルトの名無しさん
2012/08/01(水) 21:52:59.26このスレには>>234で投下済みだ。
別スレを回ろう。
0244デフォルトの名無しさん
2012/08/02(木) 01:00:29.93http://yuroyoro.hatenablog.com/entry/20110126/129604334
これとこれ見ろや
っていうかむしろ「AttrHelper、Holder」で検索すると真っ先にこれが出てくるレベル
それでも理解できないならScala使うのやめよっか…
0245デフォルトの名無しさん
2012/08/02(木) 22:58:31.560246デフォルトの名無しさん
2012/08/04(土) 12:17:33.070247デフォルトの名無しさん
2012/08/04(土) 13:22:51.110248デフォルトの名無しさん
2012/08/04(土) 22:10:06.190249デフォルトの名無しさん
2012/08/05(日) 10:07:45.390250デフォルトの名無しさん
2012/08/05(日) 18:57:49.940251デフォルトの名無しさん
2012/08/06(月) 07:53:14.49fmap :: (a -> b) -> f a -> f b
何故このように変換できるの?
trait Functor[F[_]] {
def map[A,B](fa: F[A])(f: A => B) : F[B]
}
0252デフォルトの名無しさん
2012/08/06(月) 09:56:54.97fmap :: (a -> b) -> f a -> f b
instance Functor [] where
fmap = map
fmap (\x -> x * 2) [1, 2, 3]
↓
trait Functor[F[_]] {
def map[A,B](fa: F[A])(f: A => B) : F[B]
}
implicit val functorListInstance: Functor[List] = new Functor[List] {
def map[A,B](fa: List[A])(f: A => B): List[B] = fa map f
}
implicitly[Functor[List]].map(List(1,2,3))(2 *)
こう書けばわかるでしょ
■ このスレッドは過去ログ倉庫に格納されています