トップページ⇒tech
1001コメント329KB

プログラミング言語 Scala 7冊目

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2011/09/04(日) 20:07:34.70
The Scala Programming Language
ttp://www.scala-lang.org/

■リンク集
ttp://sites.google.com/site/scalatohoku/%E5%8B%89%E5%BC%B7%E4%BC%9A%E8%B3%87%E6%96%99

■前スレ
プログラミング言語 Scala 6冊目
ttp://hibari.2ch.net/test/read.cgi/tech/1307416864/

■Scalaの紹介文(さわり)
Scalaは簡潔かつ優雅で型安全な方法でよくあるプログラミングパターンを表現できるように
設計された汎用プログラミング言語です。
Scalaはオブジェクト指向と関数型言語の特徴をスムーズに統合しておりJavaやその他の言語を扱う
プログラマをより生産的にすることができます。(以下略)
ttp://www.scala-lang.org/node/25

■Scalaに関する書籍(英語)
ttp://www.scala-lang.org/node/959
リファレンスマニュアルや草稿のPDFなども充実しているのでそちらも参照してください。
日本語の資料には、チュートリアルの訳やIBM dW、IT Proの連載記事、各々で開かれた勉強会の資料などがあります。
0263デフォルトの名無しさん2011/10/02(日) 01:09:08.63
>>261
なるほどっすな。
Scala2.8の登場で、XMLをもっとうまく実装できる環境が整ったんでしょうね。


そして、これは有望なWebフレームワーク?
BlueEyes
https://github.com/jdegoes/blueeyes
A lightweight Web 3.0 framework for Scala, featuring a purely asynchronous architecture, extremely high-performance, massive scalability, high usability, and a functional, composable design.

Sinatraクローン(Scalatra)をネタに上を目指すとか。MVCならLift使えとか。
0264デフォルトの名無しさん2011/10/02(日) 08:20:30.82
ms単位の差が問題になるパーサを作っているのですが、
scalaで高速なパーサを作る定番はあるのでしょうか?
パーサコンビネータライブラリしかないのかなあ。
0265 ◆CgacaMDhSQ 2011/10/02(日) 09:39:18.38
>>264
Scalaのパーサコンビネータライブラリは、速度が重要になるパーザを書く用途には
本質的に向いていません(これはコップ本にも書かれていますが、Scalaのパーザコンビネータライブラリの
実装によるところが大きいです)。

速度的に、それよりもっと良いものとして、@djspiewak の GLL Combinators
https://github.com/djspiewak/gll-combinators
というのがあります。これもパーザコンビネータですが、Scala標準のものより速度が出るように
設計されています(特に、LL(k)文法に収まる場合)。

もっと速度を追求したい場合は、既存のJava用パーザジェネレータを使うという手もあります。いくつか
注意すべき点はありますが、基本的にScalaから問題なく使えます。ANTLR辺りが個人的にお勧めですが、
この辺は(必要に応じて)どれ選んでも良いと思います。性能がかなり重要とのことなので、実際にいくつかの
パーザジェネレータで簡単なベンチマーク取ってみるのが良いかと。

最後に手書きの場合ですが、Scalaで手書きパーザで速度出したい、となると、どうしてもある程度手続き的なコード
書く必要があって、その場合、本質的にJavaとあまり変わらないコードになります(型推論とかで多少楽はできますが)。
0266 ◆CgacaMDhSQ 2011/10/02(日) 09:55:52.85
>>262
概念的にはjava.util.concurrent.FutureとAkkaのFutureは類似のものですが、
AkkaのFutureはモナドなので、他のFutureから簡単にFutureを合成できたりと、
機能がよりリッチなものになっています。で、Promiseですが、これは
java.util.concurrentには無いもので、データフロー変数と呼ばれるものを作成
して、後からそこにFuture型の値をくくりつけることができるようになっています。
0267デフォルトの名無しさん2011/10/02(日) 10:27:30.17
>>265
ありがとうございます。
やはり標準のパーサコンビネータは向いてないようですね。

GLL(GLRのLL版?)をまずは試してみます。
0268デフォルトの名無しさん2011/10/03(月) 18:06:33.04
scala実践プログラミングを母校の図書館で借りたんだけどあまり人気ないみたいね
0269デフォルトの名無しさん2011/10/03(月) 19:17:15.84
>>268
尾崎のクオリティが低いばかりに…申し訳ありません…
0270デフォルトの名無しさん2011/10/03(月) 20:51:21.89
そろそろ名誉毀損とか、そういう言葉を持ち出した方がいいのか。
0271デフォルトの名無しさん2011/10/03(月) 21:07:28.17
ループの外側でリストを生成して、直下のループのなかでTuple2オブジェクトを生成して、そのリストに追加して行く。(ループ回数は不定)
このコードってどう書くの?
リストにタプルを追加しようとするとtype mismatch になっちゃう。
0272デフォルトの名無しさん2011/10/03(月) 21:17:56.37
>>269-270
コンセンサスがとれているならともかく、まあ確かに、具体的にクオリティの低い箇所を
具体的に指摘すべきだよな。
0273デフォルトの名無しさん2011/10/03(月) 21:24:36.06
本人の自虐だと思った
0274デフォルトの名無しさん2011/10/03(月) 21:44:06.13
>>271
Scala歴二日のHaskellプログラマが書いてみました
意図どおりですかね?
たぶんエラーになったコードを貼ったほうが思い違いが少なくてよいと思います

var l : List[(Int,Int)] = List()
for (i <- List(1,2,3)) {
l ::= (i, i + 1)
}
println(l)

Scalaキモいなあが二日間いじった感想です
subtypeキモいです
これからこのスレでお世話になろうと思います
よろしくおねがいします
0275デフォルトの名無しさん2011/10/03(月) 22:00:00.46
>>271
タプルを囲むカッコを書いたつもりで、実は引数のカッコを書いていた、
というのがありがちだから、とりあえずタプルのカッコを更にカッコで包んでみるんだ。
0276デフォルトの名無しさん2011/10/03(月) 23:19:34.11
>>274 >> 275
ありがとう!
どうやらListの宣言の時点で間違っていた(理解していなかった)みたい。
object GetOptions {
def main( args:Array[String] ){
var list:List[(String,String)] = List()
for ( i <- 1 to 10 ) {
//list =:: "a"+i -> i.toString()
list = list ::: List("a" + i -> i.toString())
}
println (list)
}
}

普段仕事でJavaとPHPしか触らなくて、まったくScalaの勉強が進まなかったから、とりあえずPerlのGetOptions
みたいなものでも作ってみようと思っていきなり躓いてた。
0277デフォルトの名無しさん2011/10/03(月) 23:41:17.15
>>276
ListBuffer使えばいいと思うよ

object GetOptions {
def main(args: Array[String]) {
val buf = new scala.collection.mutable.ListBuffer[(String, String)]
for (i <- 1 to 10) {
buf += "a" + i -> i.toString
}
println(buf.result)
}
}
0278デフォルトの名無しさん2011/10/04(火) 15:29:50.69
>>276

(1 to 10).map(i => "a" + i -> i.toString)

または

for(i <- 1 to 10) yield i => "a" + i -> i.toString

どうしてもリストが良ければ、最後で

toList

でどうでしょうか

0279デフォルトの名無しさん2011/10/05(水) 09:32:38.59
Scala 2.9.1 & Akka 1.2 のお手軽インストーラ
「Typesafe Stack 1.1」がリリースしてるよぉ

http://typesafe.com/stack/download

こっそり同僚のPCにインストールするのに便利!
0280デフォルトの名無しさん2011/10/05(水) 09:53:37.98
Finagleはまだscala2.8.1だし食い合わせのいいakkaにしようかな
0281デフォルトの名無しさん2011/10/05(水) 20:35:54.05
>>280
何を作る気なんだ?
0282デフォルトの名無しさん2011/10/05(水) 23:31:18.43
>>278
元々の質問読んだら?
0283デフォルトの名無しさん2011/10/06(木) 08:22:43.96
akkaり〜ん!
0284デフォルトの名無しさん2011/10/06(木) 18:19:49.24
アニオタきめえ
0285デフォルトの名無しさん2011/10/06(木) 18:34:14.33
日本のScalaユーザの大半はアニオタだろ。お前も含めて。
0286デフォルトの名無しさん2011/10/06(木) 18:53:13.75
Haskellほどではないな
0287デフォルトの名無しさん2011/10/06(木) 19:48:54.71
Haskellやったらかわいい彼女やかっこいい彼氏が出来るらしいけど、
Scalaやったところでモヒカンになれる気しかしねぇぜ!
0288デフォルトの名無しさん2011/10/07(金) 00:10:20.65
酢辛って感じ
0289デフォルトの名無しさん2011/10/07(金) 13:03:21.77
やっぱさー
文系馬鹿がScala使ったところで、ベタージャバにしかならないね
文系にはオブジェクト指向
0290デフォルトの名無しさん2011/10/07(金) 13:19:39.52
文系くん、ベターな日本語で頼む
0291デフォルトの名無しさん2011/10/07(金) 13:31:23.34
どうしたのおっさん?年下の上司にScala却下されたの?
0292デフォルトの名無しさん2011/10/07(金) 20:20:05.30

ベターなJavaでも、全然OKだと思う、、。


だが、問題は、Java自体が人気下降気味なこと。
Android関連で、また、盛り返してくれればうれしいけど。

Javaは、GUIとかがイマイチ垢抜けないよね。
SwingXとかでサクサク作れる開発環境があると良いのだが。
0293デフォルトの名無しさん2011/10/07(金) 22:47:55.67
Javaはオワコンだろう
0294デフォルトの名無しさん2011/10/07(金) 23:00:40.02
AndroidのJavaはOracleに訴えられちゃったからね……
0295デフォルトの名無しさん2011/10/08(土) 01:13:37.51
Java言語とJVMは分けて考えろよおめーら
0296デフォルトの名無しさん2011/10/08(土) 01:23:29.47
jvmのjava離れ
0297デフォルトの名無しさん2011/10/08(土) 02:00:11.94
jvmってジャヴァで実装されてるんですか?
0298デフォルトの名無しさん2011/10/08(土) 02:32:55.07
Squawk VMの話?
0299デフォルトの名無しさん2011/10/09(日) 06:31:46.58
「すっからかん」に「あっかん」やろ?関西弁にしたらすからはあかん
のや
0300デフォルトの名無しさん2011/10/09(日) 11:49:29.38
>>299
つまんねえんだよクズ
これだから土人は…
0301デフォルトの名無しさん2011/10/09(日) 21:37:20.95
>>300
頭がすっからかんなのね。気の毒に。
0302デフォルトの名無しさん2011/10/09(日) 21:47:38.71
荒らしはスルーでお願いします
0303デフォルトの名無しさん2011/10/10(月) 20:18:15.70
普及率を考えるとWebはPHP >> java >> rubyの順でずっと席巻してそうだな。
scalaはベターC++を目指したD言語と同じ末路確定
0304デフォルトの名無しさん2011/10/10(月) 21:36:34.72
ちょっと何言ってるかわかりませんね
0305デフォルトの名無しさん2011/10/10(月) 23:40:58.62
Facelets/JSF2.xみたいなのがScalaで書けたらなぁ…。
0306デフォルトの名無しさん2011/10/10(月) 23:42:46.37
Scalaの日本語wikipediaの記事を見るたびに、いたたまれないというか、悲しい気持ちになる。
0307デフォルトの名無しさん2011/10/11(火) 01:46:27.81
>>303
言語仕様に優れ、C言語と連携もばっちりのD言語は
かつてベターC++と一部で騒がれたが、結局は普及率せず風前の灯し火
scalaの立場と似ているだろ

そして言語仕様の酷いPHPが普及率で君臨し続ける
0308デフォルトの名無しさん2011/10/11(火) 02:36:23.39
>>307
別に国内での普及率なんてどうでもいいなぁ
俺はScalaが気に入ってるから使うけど、JavaやPHPが好きな人はそれを使い続けてればいいと思うよ
0309デフォルトの名無しさん2011/10/11(火) 03:22:06.62
D言語はともかく、信頼できる体制でメンテされる言語なら仕事でも使いたいじゃん
だから普及してくれないと困る
0310デフォルトの名無しさん2011/10/11(火) 03:31:28.22
>>309

同意。

とりあえず一度普及してくれれば、その後もメンテされ続けるからなあ。

0311デフォルトの名無しさん2011/10/11(火) 06:45:00.66
>>303 >>307
しかし何故に比較対象がPHP…??
C言語とかも出てくるし、どういう分野での話をしてるのだ?
0312 ◆CgacaMDhSQ 2011/10/11(火) 07:27:25.50
国内はともかく、海外では、著名なサービス(Twitter, LinkedIn)を提供している会社が何社も使っていますし、
著名じゃない所でもScalaを採用している会社が増えています。Typesafe社という形でサポートビジネス等を
立ち上げたからには、それらの会社が軒並みScalaを破棄するという事にならなければ、当分はメンテされるでしょう。
Typesafeがどれだけ儲かってるかはわかりませんが、主要メンバって結局はEPFLのScalaチームなので、Typesafe
が儲からなくてもメンテナンス自体は継続可能な状態ですし。

あと、互換性の問題を無視して言語仕様を拡張しようとしても、公式MLで文句言う「仕事でScala使ってるユーザ
(海外)」がそれなりに居ますし今後しばらくは「破壊的な」言語仕様の変更は起こらないと思います。
0313デフォルトの名無しさん2011/10/11(火) 07:37:09.81
JVM依存が無くなってくれれば……
0314デフォルトの名無しさん2011/10/12(水) 06:59:33.93
http://www.youtube.com/watch?v=jAMNyqYLh78
小田好先生ってこんなイケメンだったんだな
0315 ◆CgacaMDhSQ 2011/10/12(水) 07:50:00.29
>>314
Odersky先生に会った個人的な印象としては、ナイスミドル、という感じでしたね。なんか顔つきがあまり泥臭くない
というかw あと、結構情熱家だなあ、とも。
0316デフォルトの名無しさん2011/10/12(水) 21:31:21.43
>>313
使う人がいなくなる。
0317デフォルトの名無しさん2011/10/12(水) 21:38:54.52
.NET移植が順調に進んで、進みすぎて本家追い越すくらいになればあるいは
でもあれIKVMだったっけ?
0318デフォルトの名無しさん2011/10/13(木) 00:44:34.76
コンパイルターゲットがJVMなのは、各種のJVM資産が使えるというメリットもある一方で、
環境が限られるというデメリットもあるよねえ。
、
まあ、OpenJDKとかもあるから、JVMがなくなることはないと思うのだけど、、。


あと、JavaならGWTで JavaScriptに変換できるけど、
Scalaではそういうのないの??

0319デフォルトの名無しさん2011/10/13(木) 01:39:52.57
The Scala Compiler Corner, for .NET and Mono fans: A collection of resources for compiler hackers focusing on the MSIL backend of the Scala compiler
http://lamp.epfl.ch/~magarcia/ScalaNET/
jdk2ikvm: A source-level conversion tool to migrate Scala programs from JDK to .NET
http://lamp.epfl.ch/~magarcia/jdk2ikvm/
ikvmを使ってconvertするみたいだけど、よくわからん
0320 ◆CgacaMDhSQ 2011/10/13(木) 02:29:37.92
>>318
>あと、JavaならGWTで JavaScriptに変換できるけど、
>Scalaではそういうのないの??
あるよ。
http://scalagwt.github.com/
まだ正式リリースは無いが、GWTのJavaで書かれたデモ(に相当するScalaコード)ほとんどがコンパイル/動作できるくらいには進展してる
らしい。
0321デフォルトの名無しさん2011/10/13(木) 02:58:37.26
s2jsというコンパイラプラグインもあるが、俺の所で動いたためしがないな。
0322デフォルトの名無しさん2011/10/13(木) 09:03:52.31
JVM抜きでは衰退するというのは、ScalaってJava使いから来てる人
が圧倒的に多いようだからだよ。逆に言えば、Java使いから魅力が
あっても、それ以外からは魅力がない言語ということを暗に意味してる。
C#なんかも.NETじゃなかったら普及してないだろう?それと同じ。
0323デフォルトの名無しさん2011/10/13(木) 13:50:46.17
今のところJVMの問題よりJava文化の恩恵を受けているほうが遥かに大きいだろ
0324デフォルトの名無しさん2011/10/13(木) 21:24:51.51
今更だが、並列コレクションを使ってみた。
確かに全CPUを使いきってくれる。
手軽だね。

ただ、共有データを操作する際にロックは必要だと思うけど、見当たらない。
これはJavaのロック機能を使えということなのかな。
0325デフォルトの名無しさん2011/10/14(金) 01:43:53.25
Javaの経験のある初心者です。scalaすごくいいですよね。Javaで面倒くさいと思った部分(ex new)をいろいろ楽にしてくれているし。
これが広まらずに終わるのって正直やだなと思います。
scalaが信用され利用できる範囲が広がる事を祈ってます。
0326 ◆CgacaMDhSQ 2011/10/14(金) 06:16:14.73
>>324
まず、並列コレクションでは、明示的なロック操作を行う事は基本的には想定されていません。
並列コレクションのモデルは、いわゆる「暗黙的な」並列化という奴で、不変コレクションを使って
いて、共有データを高階関数内で書き換えなければ、処理が並列化されている事は、プログラマ
から「見えない」というものです。ですから、そもそも並列コレクション専用のロックメカニズムは
用意されていません。Javaのsynchronizedを使うことはできますが、基本的にそれはやらない方
が賢明です。

ロックを使う必要がある場合には、ロックを使わないでいい形に、並列コレクションを使った処理にうまく
変換するか、Actorなどの「明示的な」並行処理を提供するライブラリを利用するべきです。
0327デフォルトの名無しさん2011/10/14(金) 16:25:08.38
プログラミング初心者なんですが、コップ本とSICPはどちらがためになりますか
0328デフォルトの名無しさん2011/10/14(金) 16:32:58.51
その前置きが必要な質問か
0329デフォルトの名無しさん2011/10/14(金) 16:33:05.20
高校生でお金がないので、どちらか一冊を読み込もうと思っています
0330デフォルトの名無しさん2011/10/14(金) 17:29:39.85
そりゃSICPのほうが役に立つだろうが、通読するのはなかなかきつい
特に日本語版
0331デフォルトの名無しさん2011/10/14(金) 17:47:37.27
図書館か図書室の司書に言って買ってもらえや
0332デフォルトの名無しさん2011/10/14(金) 17:52:17.71
SICPなら工学部がある大学の図書館に行けばあるかもね。
そこの学生じゃなくても入館はできるよね?
0333デフォルトの名無しさん2011/10/14(金) 19:21:44.98
最近のデジタルネイティブのネイティブっぷりはほんと驚異だなぁ。
0334デフォルトの名無しさん2011/10/14(金) 22:06:01.77
SICPはプログラミング(もっというとコンピューターサイエンス)を
学ぶための手段としてSchemeを使う本で、コップ本はScalaを学ぶための本。
だいぶ毛色が違うんで目指してる方向が逆ならそれぞれ役に立たない。

それから、ほんとにまったくプログラムしたことない状態なら
コップ本一冊だけでやるのはかなりきつい
0335デフォルトの名無しさん2011/10/14(金) 22:24:07.93
任意の関数を受け取って、その関数をラップした同じ引数の新しい関数を返す関数ってタイプセーフに書けますか?
0336デフォルトの名無しさん2011/10/14(金) 23:25:37.56
>>335
任意の関数を受け取る時点で無理じゃない?

def wrap[T,R](f: Function1[T,R]) = (t: T) => {
println("wrapped")
f(t)
}

こんな感じでFunction0からFunction22用まで定義するとか
0337デフォルトの名無しさん2011/10/14(金) 23:37:43.34
ちょっと違っちゃうがwrap呼ぶ前にtupled呼んで1つのタプルを引数に取る関数に変換すれば
0338デフォルトの名無しさん2011/10/15(土) 00:31:43.64
tupleですか。ありがとうございます。

一応やりたい事のサンプルみたいなのをpythonで書いておきます。
型のない言語だと可変長引数でなんとでもなるのですが、
タイプセーフにできないものかと思いまして。

...def wrap(func):
... def cls(*args, **kwargs):
... brfore()
... try:
... return func(*args, **kwsrgs)
... finally:
... after()
... return cls

こういう感じでラップ前と同じ引数で呼び出せば
実行前になんらかの処理を実行してくれて、
かつ呼び出す側はラップされてるかどうかを
意識する必要がないという状態にしたいです。

できなければいくつか引数の違う関数を作る方法で妥協するのが一番かなと思ってます。
0339デフォルトの名無しさん2011/10/15(土) 00:33:25.37
Scalaで書いてから質問しろよw
0340デフォルトの名無しさん2011/10/15(土) 00:50:17.65

俺よくこういうコードを書くんだがもしかしてこんなので代用できねーか?

def wrap[A](block: => A): A = {
 before()
 try {
  block
 } finally {
  after()
 }
}

wrapに渡すときに引数も一緒に渡す
wrap(hoge(a,b))

やりたいことと違ったらゴメンだが
0341デフォルトの名無しさん2011/10/15(土) 00:50:47.56
詳細がわからないから何とも言えないけど、
どうも発想の筋が悪いというか、関数型っぽくないというか
0342デフォルトの名無しさん2011/10/15(土) 03:11:52.66
>>341
関数型ではデコレーターとかあまり使わないのでしょうか?
代わりにどのような方法で代用するのでしょうか?

ログ出力とか楽なのになぁ。
0343デフォルトの名無しさん2011/10/15(土) 08:30:28.80
普通の関数型言語は、1引数関数しかないので何の問題もない。

残念ながらscalaはJavaとあわせるという制約があって、そうなっていないので
ちょっとぎこちなくなるね。
0344デフォルトの名無しさん2011/10/15(土) 14:47:24.92
>>330-334
レスありがとうございます
JavaとJavaScriptは少しだけ書けます
JavaもJavaScriptのように自由に関数を扱えればいいのにと思っていたところ
Scalaを知って大変興味を持ちました

SICPは翻訳も内容も難しいとのことですが、挑戦してみよぅと思います
Scalaプログラマの皆さん、ありがとうございました
0345デフォルトの名無しさん2011/10/15(土) 16:36:35.35
>>344
SICPは何年かかっても読む価値のある本だ
問題も解けよ。感動がある
分厚いので挫折しそうになるが、なんとか二章までがんばれ
偉そうなこと言えるレベルになるぞ
0346デフォルトの名無しさん2011/10/15(土) 16:57:13.27
SICPは前半は抽象化の話で
後半はmeta circular
重要だけどちょっと毛色が違う
0347デフォルトの名無しさん2011/10/15(土) 17:08:53.26
>>343
なるほど!
1引数の関数しかないってことですか。
じゃあ関数をカリー化する関数を作れば
なんとかなりそうな気がしてきました。
ありがとうございます。

def wrap[T, U](func: T => U): T => U = {
val r: T => U = {...}
r
}

こんな感じ?
0348デフォルトの名無しさん2011/10/15(土) 21:56:40.01
scalaからJavaで書いたクラスのメソッドを呼び出すとき、
そのメソッドと同名のフィールドがあると呼び出せません。

public class A {
private int m;
public int m() { return 0; }
}

--- scala

def f(A a) {
a.m() <-- エラー
}

scalaではメソッドとフィールドの名前空間が同じためかと思うのですが
回避策はあるのでしょうか?
0349デフォルトの名無しさん2011/10/18(火) 00:38:14.38
ここよりいい解説知りませんか?

http://twitter.github.com/scala_school/basics2.html
0350デフォルトの名無しさん2011/10/18(火) 00:41:04.56
こっちだった

http://apocalisp.wordpress.com/
http://www.codecommit.com/blog/ruby/monads-are-not-metaphors
0351デフォルトの名無しさん2011/10/18(火) 01:30:20.95
>>350
http://dl.dropbox.com/u/261418/Monads_are_Elephants/index.html
これを貼れというステマですか?
0352デフォルトの名無しさん2011/10/21(金) 13:59:25.96
Scala IDE for Eclipse入れてjavaのプロジェクト触ってるとよくScalaのライブラリを
ビルドパスに追加するか聞かれてうざったいんだけど、これ消せない?
0353デフォルトの名無しさん2011/10/22(土) 08:43:48.90
>>327
SICPを読むくらいならHaskell勉強した方が学びやすいし、ためにもなると思うよ。
基礎的な勉強がしたいならTAPLの方がオススメ ttp://www.cis.upenn.edu/~bcpierce/tapl/
0354デフォルトの名無しさん2011/10/22(土) 10:35:57.23
ITProで新しいScalaの連載始まったね。けっこうわかりやすい。
「Scalaプログラミングに欠かせない機能---Scalaの基本4」
http://itpro.nikkeibp.co.jp/article/COLUMN/20111011/370491/
0355デフォルトの名無しさん2011/10/22(土) 12:21:48.24
始まったね、とかいいつつ最終回の記事を紹介するとは
0356デフォルトの名無しさん2011/10/22(土) 13:04:35.67
>>355 あれ、これって4回で終わりなの?もっと連載してほしいのに。
0357デフォルトの名無しさん2011/10/22(土) 14:00:01.44
>>356


連載っていうか、もともとは月刊雑誌の一回だけの特集を、Webに乗せただけ。


日経ソフトウェアの2011年6月号  pp.78-79 が、
http://itpro.nikkeibp.co.jp/article/COLUMN/20111011/370488/
変数とクラスを学ぶ---Scalaの基本1

同じく pp.85-87が
http://itpro.nikkeibp.co.jp/article/COLUMN/20111011/370491/
Scalaプログラミングに欠かせない機能---Scalaの基本4


だから、最初から これで完結だよ。
0358デフォルトの名無しさん2011/10/24(月) 00:33:03.64
HaskellもOCamlも、定義したヴァリアントはデータ型の内部構造を
直接さらしてしまう、という欠点を持っているけど
Scalaではケースクラスにしつつ内部表現を隠蔽することも簡単にできるらしい

これってどういうこと?
0359デフォルトの名無しさん2011/10/24(月) 08:36:24.45
プライベートなメソッドを持てるかどうかって事?
なんかOCamlとかでもできそう。
0360デフォルトの名無しさん2011/10/24(月) 10:03:50.82
Haskellならデータ構築子をモジュール外に公開しないことで可能
内部と外部の境界がモジュールなので、クラスとかに比べたら少し大きい
0361デフォルトの名無しさん2011/10/24(月) 17:22:44.52
発想の基本がOOPの言語と発想の基本が関数型では違ってくるよ。
ありがたがってる土俵が関数型のプログラミングではあまりありがたみが
ないというのはよく有りそうだよ。
0362デフォルトの名無しさん2011/10/24(月) 17:53:53.25
関数型言語ではそもそもアクセスされて困るプロパティが作れないからなぁ。
■ このスレッドは過去ログ倉庫に格納されています