[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 09/04 23:04 / Filesize : 158 KB / Number-of Response : 669
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

プログラミング言語 Scala



1 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 22:40:17 ]
The Scala Programming Language
ttp://www.scala-lang.org/

チュートリアル日本語訳
ttp://homepage.mac.com/takashi_miyamoto/scala/ScalaTutorial.pdf
どう書く?org Scala
ttp://ja.doukaku.org/lang/scala/

21 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 09:46:41 ]
続き。
パターンが網羅されているかを静的にチェック可能というのは、
例えば次のようなコードを書いたときに(Numのパターンの書き忘れ)、コンパイラが
warningを出してくれることを指している。
def eval(exp :Exp) :Int = exp match {
case Add(l, r) => eval(l) + eval(r)
case Sub(l, r) => eval(l) + eval(r)
}
ただし、Scalaでこの場合にwarningを出すためには、宣言を
abstract sealed class Exp
case class Add(lhs :Exp, rhs :Exp) extends Exp
case class Sub(lhs :Exp, rhs :Exp) extends Exp
case class Num(value :Int) extends Exp
のように、抽象クラスであるExpをsealedとして宣言しておく必要がある。

22 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 00:54:41 ]
とりあえず A Scala Tutorial for Java programers を読んだのですが
次は何を読めばいいですか?
どうもプログラミング言語の学習の仕方がいまだによくわからなくて困ってます。

23 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 01:34:52 ]
>>22
とりあえず、何かネタを決めて適当なプログラムを書いてみるのが
良いと思う。Scalaやってるってことは他の言語は既に知ってるってこと
だろうから、とにかく書いて慣れるのが一番。あと、ScalaReference.pdfは
読むのにやや知識が必要だけど、Scalaにどんな機能があるのかを知るのに
有用だから、暇なときに眺めてみるのも良いかも

24 名前:デフォルトの名無しさん [2008/03/15(土) 01:46:48 ]
日本語の入門書がまだないのはしょうがないとして。。。
洋書だったらなんかある?

25 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 01:53:40 ]
>>20-21
丁寧にありがとう!

sealed(シールド) class なんてのがあるんだ
また守備力があがってしまうな

26 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 01:55:08 ]
Java 系だから final でいいと思うのに
C# 風の名前付けしてるんだな。

27 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 02:06:23 ]
>>26
いや、実はfinal classもあるんだけど、sealedとは意味が違うという罠
final classはJavaのそれと同じで、そのクラスから継承することができない
という意味。sealed classは同じコンパイル単位でならそのクラスから継承する
ことができる

28 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 02:08:49 ]
>>24
洋書では、Programming in Scalaという本が(今年中?)出る予定。
現在は、PrePrint版を購入することができる。
www.artima.com/shop/forsale

29 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 02:09:40 ]
>>27
なるほど。



30 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 02:11:46 ]
>>27
なるほど

31 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 02:16:44 ]
ttp://www.scala-lang.org/docu/files/ScalaReference.pdf
を読んでたんだけど(読めないけど)
予約語の一覧に「public」が見当たらない

しかも
AccessModifier ::= (‘private’ | ‘protected’) [AccessQualifier]
って書いてある。

もしかしてScalaには「public」修飾子がない?
クラスもメンバもみんなデフォルトでpublic?

32 名前:デフォルトの名無しさん [2008/03/15(土) 02:22:19 ]
>>28
サンクス
今年中か。。
英語の勉強でもしとくか・・・

33 名前:31 mailto:sage [2008/03/15(土) 02:27:08 ]
試してみればよいのか


scala> var public = 1
public: Int = 1

scala> System.out.println( public )
1


あぁ… 無いんだ

34 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 02:27:47 ]
>>31
うん。Scalaではアクセス修飾子はデフォルトでpublicなので
用意されてない。

35 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 12:14:16 ]
>>27
jarのマニフェストに書くSealedと同じようなものか。

36 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 15:53:01 ]
>>8
case classは、
pattern matchのある
C言語でいうところのunionです。

一つの型にマージしたいところに使います。
例えばポインタがどのケースも指す可能性がある場合。

37 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 21:42:49 ]
Rubyとどっちが強いの?

38 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 21:49:33 ]
Scalaです。普及度以外は。

39 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 22:04:37 ]
Rails相当のものはありますか?



40 名前:デフォルトの名無しさん [2008/03/15(土) 22:08:04 ]
Javaの標準ライブラリなら何でも使えるの?

41 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 01:44:44 ]
traitとabstract classの違いって何ですか?
なんか、同じのような……。

>>40
多分そうです。

42 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:13:39 ]
>>41
abstract class は抽象クラスで trailtはmixin
継承元としての抽象クラスはひとつしか指定できないけど、mixinはなんぼでも指定できる。

abstract class 通信機
trait テレビ
trait おサイフ
class 携帯電話 extends 通信機 with テレビ with おサイフ {
 …
}

43 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:22:25 ]
class A extends B とした場合、
継承だと B に A の実装を追加したものが A になるし、
mixin だと A に B の実装を追加したものが A になる。
継承と mixin の大きな違いはここにある。

>>1 のチュートリアルにある例で言えば、
Ord の実装の中に

 def <=(that: Any): boolean =
  (this < that) || (this == that)

ってのがあるけど、Ord の中には == の実装どころか宣言すらない。
mixin 先に == があれば使えるし、無ければ使えない。
== が既にあるクラスに mixin されることを前提に作られている。

44 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:28:46 ]
つまり、mixin の場合は A にある実装を B で使うことができる。
継承では派生クラスの情報を基底クラスで使うことになるから、
こういうことは基本的にはできない(CRPT は例外だが)。

45 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:55:02 ]
CRPTって何?

46 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:48:17 ]
en.wikipedia.org/wiki/Curiously_Recurring_Template_Pattern

要するに親クラスが派生クラスの実装に依存できる。
boostのiterater_facadeで非常にうまく使われてる。

47 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 08:24:53 ]
mixinがあれば継承はなくてもいいのかな
overrideができないのかも知れないが

48 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 10:15:18 ]
Scala的に望ましい言語仕様と、JVMのセマンティクスとの軋轢ってないの?

YASVマダーチンチン。

49 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 10:17:58 ]
>>22
次に読むべきはたぶん、このへん。
www.pana-wave.com/news_lr.html



50 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 11:11:29 ]
「スカラー値」とかの普通名詞じゃなくてなんかの固有名詞で
響きが脳みそのどっかにひっかかってたんだけど

これだったか・・・


51 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 22:44:57 ]
The Scala Language Specificationとかにさっと手が伸びるような人は
画面で読んでるのでしょうか?
印刷して読んでるのでしょうか?

52 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 23:06:46 ]
印刷一読、画面参照

53 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 23:08:23 ]
初ほしゅ・・・って、まだ不要なのか?

54 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 20:14:39 ]
なぜ素直にJRubyをつかわないのか

55 名前:デフォルトの名無しさん [2008/03/22(土) 21:30:09 ]
JRubyってアプレット作れるの?

56 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 21:33:55 ]
作れるけどなに?

57 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 21:44:01 ]
Rubyは危険な宗教だから近づきたくない

58 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 21:46:35 ]
モルモン教か

59 名前:デフォルトの名無しさん [2008/03/22(土) 21:48:17 ]
>>54
やっぱスピードじゃない?



60 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 02:41:29 ]
>>54
型チェックに魅力を感じるからじゃない

61 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 03:57:02 ]
代入式がUnitを返すのですが、こういう仕様なのですか?

62 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 05:15:27 ]
うん

63 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 05:26:08 ]
Scalaは面白いしそこそこ使えそうではあるんだけど
構文を導入せずに見た目の帳尻だけ合わせてる部分が
長い目でみればマイナスに表れるという感がぬぐえない。
丁度C++のような立ち位置だと思うこともあって、将来的な筋の悪さを感じる。
(C/オブジェクト指向/C++ と Java/関数型/Scala という対比。)

64 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 08:29:46 ]
>>63
C++のような立ち位置といのは言い得て妙だな

65 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 08:31:24 ]
途中で送信してしまった。
ただ、構文を導入せずに見た目の帳尻だけ合わせてるってのは
どの辺だろう?case class/pattern matchingの辺り?

66 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 14:54:43 ]
>>63
おいおい、Scalaは設計センスはすごくいいぞ。
ありとあらゆる言語をよく研究した結果作られた言語。
問題は流行るかどうか。

うまく作りすぎてるんで、
perl/python/rubyなんかのなんちゃって言語よりは、
最初のハードルが高いし。

67 名前:デフォルトの名無しさん [2008/03/23(日) 14:56:39 ]
ScalaってHaskellかOCaml
強いて言えばどっちに近いですか?

68 名前:デフォルトの名無しさん [2008/03/23(日) 16:09:26 ]
OCamlじゃないかな。評価戦略とオブジェクト指向。

69 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 19:57:06 ]
>>66
> ありとあらゆる言語をよく研究した結果作られた言語。



> おいおい、Scalaは設計センスはすごくいいぞ。

の根拠にはならんだろう。



70 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 21:07:51 ]
>>67
強いて言えばOCamlだけど
OCamlは関数型言語にOOするための機能を入れた言語
ScalaはOO言語に関数型プログラミングをするための機能を入れた言語
って感じでScalaの方がよりOOよりな感じはするね

71 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 23:24:09 ]
型システムは、メジャーな言語ではC++0xが一番近いよ。
後はHaskellとかGとか。

JavaとかノーマルなOCamlはクラス指向が非常に強いから似てない。

72 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 23:29:17 ]
C++0xってメジャーな言語なのか?

73 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 23:35:25 ]
おお、Scalaのスレができてる
Scala自体はいい言語だけど、Javaのライブラリがうんこだよな

74 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 23:57:28 ]
ライブラリのどの変がダメ?

75 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 00:03:13 ]
Scalaのライブラリはどうですか?

76 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 11:10:28 ]
>>74
粒度が細かすぎて使いづらいというのはよく言われていることだけど、
それをScalaから使うというのがまたしんどい
結局Java使ってるのと大差ない気がしてくる

77 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 12:57:22 ]
>>76
Scalaから使うときは簡単なラッパーをかましてやるのが良い使い方だと思う
本当のところ、早いところScala独自のライブラリが充実して欲しいんだけど
簡単なラッパー作るくらい大した手間じゃないし自作するのが手っ取り早い
たとえば、IOならこんな感じ

// 定義
def withReader[T](File path)(proc :BufferedReader => T) :T = {
val reader = new BufferedReader(new FileReader(path))
try {
proc(reader)
} finally {
reader.close
}
}

// 使用
withReader(new File("hoge.txt")){reader =>
//readerを使ったコード
}

ちなみにscala.io.Sourceは色々と微妙で、使いづらい

78 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 22:58:01 ]
それだと使う側のセンスが問われそうだな
俺だと劣化Rubyライブラリになってしまいそうだ
標準ライブラリで言語のポテンシャルを示してほしいところなのだが
つーかこんなラッパーが全世界で何百と作られてんだろうなあ

79 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 23:01:55 ]
というかラッパーが物凄く簡単に書けて、
再利用性も高いのが言語の売りの一つなので。



80 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 10:15:09 ]
Lisp方言並に溢れかえるラッパーにwktk

81 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 12:08:18 ]
>>48に誰も反応してくれなくて寂しい俺が来ましたよ
# あれは正確には、「JVM命令セット群のセマンティクス」と書くべきだった

ライブラリの話も出てるし、言語として完成度上げるには、やっぱそろそろJava依存抜けようか。
って無理か。

82 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 16:48:04 ]
どうしても隠せないのは実装に近いところ。
例えばboxing/unboxing関係のAnyVal/AnyRef。


83 名前:暗黙のthis mailto:sage [2008/03/25(火) 17:24:39 ]
ScalaOverview.pdfの
def + (x: Nat): Nat =
if (x.isZero) this else succ + x.pred
って、
def + (x: Nat): Nat =
if (x.isZero) this else this.succ + x.pred
のことなんだな。ちょっと混乱したので書いとく。


84 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 17:58:15 ]
>>81
配列周りはScalaの処理系が凄いがんばって他のgenericなクラスと同じように
見せようとしてるなあと思った。JVMでは配列が特別扱いされてるから、
genericなクラスのように見せかけるのはなかなか大変



>>83
暗黙のthisはJavaでもほぼ同じだから、そんなに混乱しないと思ったけど、どうなんだろう。
Java以外の言語からScala入った人?

85 名前:暗黙のthis mailto:sage [2008/03/25(火) 18:04:02 ]
operation invocationに()がないから混乱した。
Java以外にも関数型言語も分かるので、
curry化されてるのかな?と思ってしまった。

86 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 18:04:55 ]
>>82
> boxing/unboxing関係のAnyVal/AnyRef。
なんとなく想像は付くんだが、具体的にはどんな例がある?

87 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 18:06:59 ]
>>85
ああ、なるほど。invocationの()省略できる辺りは、なんか
構文的にRubyっぽい感じがするね。Scalaは細かいところで、
色々syntax sugarが多いから、慣れない内は混乱の元にも
なるなと思った

88 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 18:11:19 ]
あ、省略できるってのはちょっと不正確だったのでちょっと補足。
Scalaで0引数のメソッドを定義する方法は二つあって、
一つは

class HelloWorld {
def print :Unit = { println("Hello, World!") }
}

という形。この形の場合、
val hello = new Hello
hello.print
という形でのみ呼び出すことができ、hello.print()という呼び出し形式は
コンパイルエラーになる。もう一つは、

class HelloWorld {
def print() :Unit = { println("Hello, World!") }
}

という形。この形の場合、hello.print()と書いてもhello.printと書いても
OK。

89 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 18:29:49 ]
>>86
BoxedArrayはあれば便利だけど、なくても何とかなる。
どうしてもArrayの要素をポインタ共有したい時は、
セルクラスに入れてからArrray[セル]にすればいいから。
けどJavaではBoxedArrayがあるから、作っとかないと困る。

>>84のいうようにうまく処理されているとは思う。
Nothingがあるからprimitive = null;問題も起きないし。





90 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 02:37:56 ]
あんま愚痴っててもしょうがないので、
ありがちなところで、Ruby風文字列、正規表現ラッパーを作ってみた
と言っても、まだ半分も実装できてないけど

hexx.sakura.ne.jp/scala/RubyString.scala

使い方は、こんな感じ

import ruby._
import ruby.RubyString._

println("hoge %d %s" % (1, "fuga"))
// → hoge 1 fuga
// Rubyでは
// "hoge %d %s" % [1, "fuga"]

"a\nbbb\nccccc\n".each(l => print(l.length))
// → 246
// Rubyでは
// "a\nbbb\nccccc\n".each {|l| print(l.length)}

println("abcde".sub("(a)b(c)d(e)") { m =>
val lm = RubyRegexp.lastMatch
lm(1).upcase + lm(2).upcase + lm(3).upcase
})
// → ACE
// Rubyでは
// "abcde".sub(/(a)b(c)d(e)/) { $1.upcase + $2.upcase + $3.upcase }

今のところ、Rubyに比べて嬉しいのは、EmacsのFlymakeがよく効くところだな
悪いところは、スクリプトで使うと、やっぱり起動が遅い

91 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 02:57:01 ]
>>90
遅いよねぇ。

開発をスクリプトでやってデプロイはコンパイルしてって感じになるのかな。
でもあの起動の遅さはリズムが崩れる。

92 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 00:39:06 ]
NetBeansでScalaが書けるって聞いたんだけど
試してみた人いる?

93 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 00:42:07 ]
>>90じゃあ開発者の楽しさとしてはやっぱりRubyのほうがいいんだね。実行するたびにモタつくなんてなぁ。

94 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 01:38:57 ]
>>93
> 開発者の楽しさ

俺はコンパイラに指摘される型エラーをつぶしていくのが楽しい
だからMLも好き

95 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 06:50:40 ]
同じJVMをつかっているのに、なぜJRubyよりも性能がいいのですか?
Rubyをなんちゃって言語というほど高尚なのですか?Rubyより悪い点はどこですか?

96 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 07:01:52 ]
>>95
性能がいいのは主に

・静的型付けであり、かつ比較的Javaに型システムが近いこと
(メソッド呼び出し時にinvokevirtualなどVMのメソッド呼び出し命令をそのまま
利用できるし、数値演算もVMの命令を利用できる)

が理由だろうな。他の理由もあるだろうけど、たぶんこれが一番大きい。

97 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 09:36:07 ]
楽しさって言われてもなあ、スクリプトの起動がそれほど気になるならそうかもしれないけど
対話環境で開発することも多いだろうし、Scalaはスクリプトの方がメインではないだろうし

Rubyとの違いは、やっぱり型が静的か、動的かにつきるんじゃないの?
静的な型でもここまでできると思うか、
やっぱり面倒臭いから静的な型なんていらないと思うか

あとは関数型から引き継いだパターンマッチ、ケースクラスとか
ErlangからパクったActorがどれくらい役に立つか

98 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 09:39:38 ]
JRubyより性能いいの?
JRubyってJavaのバイトコードをターゲットにしたコンパイラなの?
独自バイトコードインタープリタなら遅くて当たり前だけど…

99 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 09:42:59 ]
>>97
あと、mixin-compositionがあるのが重要。



100 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 10:03:23 ]
ああ、そういえばScalaは後からmixinを足せるんだったな
確かに使い方によっては強力な感じはする

101 名前:デフォルトの名無しさん [2008/03/28(金) 11:34:23 ]
ぶっちゃけmixinはあんまり要らんなーと個人的には思う
caseクラスとかマッチングあたりはうれしいけど
Actorはまだ触ってないのでなんとも

102 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 13:53:22 ]
>>92
6.1betaに開発版プラグインの所を参照させて出来たよ。

103 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 14:52:00 ]
actorやmixinはプログラミングモデルだから、
慣れてない人は有り難みは分からない。
使って慣れるのみ。


104 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 16:36:28 ]
>>101
mixinはライブラリ書くとき嬉しいよ
例えば、コレクションぽく見せかけたいものに対して、scala.Iterable[T]をmix-inして、
elements :Iterator[T]だけを実装すれば、Iterable[T]にある便利な高階関数やらを
全部使えるとか。たとえば、Reader系のクラスをサブクラス化してIterable[String]
を実装するなどが考えられる。

105 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 16:38:55 ]
>>98
昔のJRubyは普通のインタプリタだったはず。その頃は凄く遅かった
最近のJRubyは内部でJVMのバイトコードにコンパイルして実行するようになった
ので速くなった。でも、Scalaには性能で遠くおよばない(言語の特性上仕方無い
けど)

106 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 22:34:26 ]
開発効率ではJRubyに遠く及ばない(言語の仕様上しかたないけど)

107 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 22:48:31 ]
どうせJRubyもScalaも使ったことないくせに

108 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 22:58:47 ]
JRubyは使ってるよ。Scalaはこれから試すよ。
仕様が汚ないけど、型があるからRubyより性能は良いってことだろ。

109 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 23:13:00 ]
マジレスだったのかよ!
で、Scalaの仕様のどの辺が気に食わないのよ
開発効率が遠く及ばないというほどの何かがあるの?



110 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 03:11:22 ]
rubyの話いらね

111 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 08:35:05 ]
>>104
多重継承の代用?
多重継承ではなくmix-inが欲しくなる場面の例はありませんか?

112 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 09:06:23 ]
基本的にmixinは多重継承の代用でしょ
mixinそのものの有用性については
Rubyが先駆者だからRubyの事例を調べた方がいいと思うよ
(またRubyの話になっちゃったけど…)

113 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 10:23:43 ]
機能的にはリッチ版だよ。
name conflictやmutliple pathを解決するための機構をプログラマに対して与える。

どれもがコンクリートクラスになりがちなクラス指向のプログラミングモデルから、
機能mixinを集めてくっつけて実用クラスを構成する〜モデルになる、というかする。

name conflictやmutliple pathはmixする時に解決できるから、
このクラスとあのクラスはうまく多重継承/結合出来ないというケースがぐんと減る。

代用とかじゃなくて、機能が増えたのがmixin。
元祖はLisp Machine LispのFlovors。
基本フレーバーを調合して、香水を作るって考え。
コンポーネント志向が強い。

もちろんmixinなくても同じことはできるよ。
アセンブラあればなんでもできるという意味では。

114 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 10:39:13 ]
え、ちょっとよくわからない
どの辺が多重継承よりリッチなの?

115 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 10:56:30 ]
つ 版

116 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 11:03:09 ]
版?

117 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 00:34:31 ]
機能は多いだけじゃだめだとおもう。わかりやすくないと。
Rubyはその辺のバランス感覚に優れているからね。

118 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 00:53:52 ]
Ruby信者もバランス感覚を覚えて欲しい

119 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 12:21:15 ]
だからもっと具体的な話しろよ
Scalaの仕様のどこがいいとか悪いとか、mixinの話も>>111に答えてやれよ

と嗾けるだけでもなんだから
俺がScalaで良いと思ったのはカリー化と無名関数だな
Rubyのブロックはへんてこ構文だったけど、Scalaはすっきりしてると思う



120 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 17:56:01 ]
部分適用はあるが、カリー化なんてあったっけ?

121 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 18:02:14 ]
カリー化はFunction.curriedでできるが、
ここで俺が言いたいのはカリー化された関数を直接書けるということだな
言葉足らずですまんが






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<158KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef