5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

プログラミング言語 Scala

1 :デフォルトの名無しさん: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/

622 :620:2008/12/19(金) 11:19:41
http://www.scala-lang.org/node/143
も結構よんでいるから俺は全然問題ない。
ただこういうのを読まずに始めたい人、
代数データタイプの知識のない人、
そういう人への「解説」がない。


623 :デフォルトの名無しさん:2008/12/19(金) 19:32:43
英語に文句を言う前に
「的を得ない」という間違った日本語を使わないようにしようぜ。

624 :デフォルトの名無しさん:2008/12/19(金) 20:04:29
scalaの公式サイトに雪が降ってるじゃないか!

625 :デフォルトの名無しさん:2008/12/19(金) 20:06:17
凄い!!

626 :619:2008/12/20(土) 12:41:14
>621
てか、英語日本語ともネット上で読めるものはすべて読みました、でも結局、
622 さんの言うように、OCaml、Haskell さらにジョイン計算理論まで目を通した
上で読み返してはじめて得心しました
ちなみにそんな私の Scala 評価は、
増築しまくりな OCaml よりはすっきり
原理原則にこだわって常時遅延評価を意識する必要が (少なくとも使用初
期には) ある Haskell よりは気が楽
オブジェクト指向はジョイン計算の具現と知って納得
といった感じス

627 :デフォルトの名無しさん:2008/12/20(土) 13:02:53
>>626
他の言語の仕様書(英語)は読んでみたことある?
俺はScalaの言語仕様の文章が特にわかりにくいとは感じなかったな。

628 :619:2008/12/20(土) 13:05:01
>623
古来中国では「的を射ない」ことを「失鵠」とも表現していました (鵠 はこの場合的の
中心の黒丸のこと; 正鵠など)
だから「失う = 得ない」で「漢字の用法」としては必ずしも間違っておらず、事実厳密
な議論では「どちらも可」となっているようです
ただなるほど国語辞典などでは「的を射る」の方しか載ってないので、「普通の日本
語」としては「的を得ない」は非推奨、ということになるようです
実際には「的を得ない」の方がはるかに広く使われてるようですが

629 :619:2008/12/20(土) 13:08:52
>>627
Java、ECMAScript と E4X をざっと
ほかは Scheme や Haskell などは日本語訳でだけス
てか、これらの文章が良すぎだったのかな?

630 :デフォルトの名無しさん:2008/12/20(土) 13:34:20
>>629
PrologのISO規格書が面白いのではないか。スタックモデルで説明している。
BNFも併記されてたと思うけど。

631 :619:2008/12/20(土) 13:44:50
Prolog は、MSX のころに 98 用 BASIC で記述されたミニマム Prolog を移植して
ちょっと遊んで以来
ちなみに自分初の処理系移植実装な経験 (懐
もしかして誤解されてるかもですが、別に言語仕様マニアではなく、Scala では
チュートリアルでも ByExample でも「全体像」がさっぱり会得できなくてしかたな
く言語仕様にトライするしかなかっただけなのでス

632 :デフォルトの名無しさん:2008/12/20(土) 14:58:39
まあ少しずつやっていきなよ。

633 :デフォルトの名無しさん:2008/12/20(土) 15:34:12
>>628
漱石枕流乙

634 :デフォルトの名無しさん:2008/12/20(土) 18:45:34
ジョイン計算理論って何よ

635 :デフォルトの名無しさん:2008/12/20(土) 19:33:44
>>634
たぶんJoin-calculus
http://en.wikipedia.org/wiki/Join-calculus
のことだと思う。全然知らないけど、分散計算の形式的な計算モデルの一つらしい

636 :デフォルトの名無しさん:2008/12/20(土) 19:57:19
>>634
ラムダ計算を並行性の観点から鍛え直したのがパイ計算
ttp://web.yl.is.s.u-tokyo.ac.jp/kobalab/kadai99/picalc.html
で、それにさらに場所階層性を導入したのがジョイン計算
ttp://jijixi.azito.com/cgi-bin/diary/index.rb?date=20070531
(すごい分かりやすい pdf があったけどパスワード封鎖されたようで、
現状で日本語での記事はこの程度しか見あたらず、2 項目の JoCaml
の部分)
ちなみに OCaml から JoCaml を作る過程で練り上げられた理論っぽい

637 :デフォルトの名無しさん:2008/12/20(土) 20:38:54
なるほど
Scalaのどの辺がそれに基づいてるの

638 :デフォルトの名無しさん:2008/12/21(日) 00:30:03
「Scala開眼」を書いた人がこの中にいるな

639 :620:2008/12/21(日) 00:58:28
>>637
Scala.Actorsとか。
こういうのは仕様書やライブラリのAPI見れば分かる話じゃないよ。
知っているのと知らないのでは理解の速度が全然違うし、
モデルの把握もしやすくなる。

>>626の言うようにScalaはいろいろといいところがあるんだけど、
解説文が少なくてあまり理解されてないと思う。
まあ>>622にある論文読めばいいんだけどw



640 :636:2008/12/21(日) 11:12:25
Scala のオブジェクト指向導入は ML 系からのアバウトな逸脱ではなく、ジョイン
計算の場所階層性 (プロセスは「場所」に属し、チャネルはその場所階層を上
位へとさかのぼりつつ目的のプロセスを検索する) をクラス階層と解釈しての
きちんとした理論を背景とするものである、ということ
これで何がうれしいかというと、プログラムの実行時エラー皆無性が計算で事
前に証明可能になる、つまり静的型のエラー回避性が動的結合にも延長でき
るようになる
ということらしい

641 :デフォルトの名無しさん:2008/12/21(日) 19:37:52
> つまり静的型のエラー回避性が動的結合にも延長できるようになる

面白そうですが、今の型システムで回避できなくて、join計算で回避できる
ようなエラーってどういうもの?

642 :640:2008/12/21(日) 20:19:02
先の今は見れない pdf では純粋にプロセス間通信に限ればそこにおける
予期せぬエラーが理論上ゼロとなることを証明してました 、たしか
むろん、ハードのエラーとかプロセス間通信以外に起因するエラーは回避
不能なはずですが
ちなみに、パイ計算の方はたしか理論上どうしても無限回帰になってしま
う場合があったはず (非理論的なメタ制約を与えれば回避できるようですが)

643 :デフォルトの名無しさん:2008/12/22(月) 13:02:43
>>639
Actorとπは別もんだろー。

644 :デフォルトの名無しさん:2008/12/22(月) 18:35:11
Scalaのpattern matchingは、
Join calculusとの関係が深いです。例えば、
ALGEBRAIC PATTERN MATCHING IN JOIN CALCULUS
http://arxiv.org/pdf/0802.4018
そのpattern matchingを使えば、
多くの並列計算モデルが、
「ライブラリとして」実装できるというのが、
Scalaの核の一つです。
Scala.Actorsはその実装の一つで、
ライブラリのソースも公開されています。
ちなみにお父さん言語のFunnelでは、
もっとJoin calculus丸出しの文法でした。

645 :デフォルトの名無しさん:2008/12/23(火) 01:09:04
【Programing in Scala】ついに届いた(笑)

自主学習進みすぎて、最早入門書は要らないんだがな・・

646 :デフォルトの名無しさん:2008/12/23(火) 11:24:49
ついに購入者が!!
どこで注文したの?

647 :デフォルトの名無しさん:2008/12/23(火) 17:24:59
>>646
Artimaのサイトで9月くらいから予約済

648 :556:2008/12/23(火) 23:14:15
2.7.3 RC1
http://www.scala-lang.org/node/417
はやっ

649 :デフォルトの名無しさん:2008/12/23(火) 23:33:16
ちゃんと日本にも発送してくれるんだ
かなり待たされたね

で、結局Amazon.co.jpではいつまでたっても買えないんだろうか??

650 :デフォルトの名無しさん:2008/12/24(水) 07:02:59
Scalaで実行時にScalaのソースファイルをコンパイルして
出来たクラスのメソッドをリフレクションで実行したい時ってどんな風に書く?

651 :デフォルトの名無しさん:2008/12/24(水) 09:08:48
>>624
ほっとくとめっちゃCPU食うよ
職場着いたら部屋が微妙に暖かかった…

652 :デフォルトの名無しさん:2008/12/24(水) 16:46:47
プログラミングしりとり
http://schiphol.2ch.net/test/read.cgi/575/1010948472/l50

653 :デフォルトの名無しさん:2008/12/24(水) 21:57:01
>>650
Scala コンパイラソースの
scala/tools/nsc/Interpreter.java interpret メソッド (475 - 520 行)
427 - 432 には compileSources、437 - 438 には compileString なんてメソッドも
ただし当然 scala-compiler.jar もクラスパス組み込みのこと

654 :653:2008/12/24(水) 22:00:54
あと、883 - 898 の loadAndRun: メソッドで名前どおりリフレクションロード & 実行

655 :デフォルトの名無しさん:2008/12/24(水) 22:11:43
>>653-654
thx!

656 :デフォルトの名無しさん:2008/12/25(木) 10:19:00
http://www.ibm.com/developerworks/jp/java/library/j-scala04298.html
>trait が実際にクラスの一部として組み込まれるまで
>trait の振る舞いの定義はチェックされません。
>あるいは別の言い方をすれば、trait を使用するクラス定義の中に
>組み込まれるまで適切さをチェックされないメソッドを定義することができます。

これはどういう意味か教えてください

あとclassに出来てtraitに出来ないことってnewだけで、
他は何でも出来るという理解でいいのでしょうか

657 :デフォルトの名無しさん:2008/12/25(木) 11:07:52
「late binding」ってことだけど。
C++0xだとtemplate/conceptで使うlate_checkってキーワードが増えてます。
これがないと、

> あとclassに出来てtraitに出来ないことってnewだけで、
> 他は何でも出来るという理解でいいのでしょうか

となって全く使えない。


658 :657:2008/12/25(木) 11:49:07
ibm.comが調子悪かったからみれなかったけど、
具体例でちゃんと説明書いてあるじゃん。
良く読みこなそう!

C++はブロックごとに指定。

template <Semigroup T>
T add(T lhs, T rhs)
{
return x + y; // Semigroup<T>::operator+
}

template <Semigroup T>
T add(T lhs, T rhs)
{
late_check {
return x + y; // class Tのoperator+
}
}



659 :デフォルトの名無しさん:2008/12/25(木) 11:53:12
C++ 0xのlate_checkはコンセプトじゃなくて
生成したソースコードで判断するというものですよね
traitはそれに近いようなことをやってるということですか?

具体的にどういうコードを書けば遅延バインディングされるんですか?

660 :デフォルトの名無しさん:2008/12/25(木) 13:05:13
http://www.ibm.com/developerworks/jp/java/library/j-scala04298.html
のどの部分が分からないの?

661 :デフォルトの名無しさん:2008/12/25(木) 13:10:45
>>660
>trait が実際にクラスの一部として組み込まれるまで
>trait の振る舞いの定義はチェックされません。
>あるいは別の言い方をすれば、trait を使用するクラス定義の中に
>組み込まれるまで適切さをチェックされないメソッドを定義することができます。

この文章以外は分かりました
traitのメソッドでも定義されていない変数なんかを使えば普通にコンパイルエラーになるので
適切さをチェックされないメソッドというのがどんなものなのかが分からないのです

662 :デフォルトの名無しさん:2008/12/26(金) 16:30:05
trait 中の定義は、実際にはそれを実装するクラスか、あるいはスーパークラス
内のプライベートメンバとしてその本体は別名定義され、trait 中のシグネチャが
それにアクセスするゲッタセッタの形になります
また、trait からはそれが指定される位置以前のほかの trait などの名前が見え
るようになっています。このため、指定順を入れ替えると動作が変わることもあ
りえます

663 :アク禁解禁:2008/12/27(土) 16:40:54
>>661
Orderd[A]の例だと
def compare(that: A): Int
の定義の存在はチェックされずに、Ordered[A]をコンパイルできます。
Object withするまで定義の存在はチェックされないわけです。
宣言の正当性はチェックされているのですが。

664 :デフォルトの名無しさん:2008/12/27(土) 22:36:35
scala.xml.NodeSeqの\\メソッドでXPath式っぽいのをかけるけど
これXPathにしなかったのはなんでだろう。
素直にXPathが使えればもっと簡潔にかけるのに。
あと属性のパターンマッチできないのも中途半端。これは属性定義が順序をもたないからだろうか?

665 :デフォルトの名無しさん:2008/12/27(土) 22:38:44
>>662-663
なるほどありがとうございます

666 :デフォルトの名無しさん:2008/12/28(日) 10:58:57
XPathを完全に実装しようとおもったらノードの構造をZipperとかにしないといけなくなる。

667 :デフォルトの名無しさん:2008/12/28(日) 20:52:47
本家サイトで XML の鉄人の参加を募集してることからして、そっちの方は
まだ十分にカバーできてないっぽい感じ

668 :デフォルトの名無しさん:2008/12/28(日) 21:23:08
>>666はよく考えたら違うな。
XPathをフル実装してかつ不変な構造にしたかったら、だな。
なんか関数型言語脳になってきたのかもしれん。

669 :デフォルトの名無しさん:2009/01/12(月) 12:58:59
Scala 2.7.3 RC2 キタ!

670 :デフォルトの名無しさん:2009/01/14(水) 22:12:08
2.7.3 finalキタ

671 :デフォルトの名無しさん:2009/01/21(水) 21:09:51
なんかliftのMLでもmartin oderskyがXMLライブラリメンテナの勧誘活動してたけどそんなに深刻なんかいな。
ScalaチームでXMLの研究してた人1人しかいなかったの?

672 :デフォルトの名無しさん:2009/01/22(木) 00:07:58
XMLまわりは下手に言語仕様に組み込むより、XSLをDSLとして扱えるとかでよくね?
今の仕様がいけてるとは思えん。中途半端な独自仕様はかんべん。

673 :672:2009/01/22(木) 00:10:30
「言語仕様」と書いたのは誤解をうけそうだけど、そのへんニュアンスで。

674 :デフォルトの名無しさん:2009/01/23(金) 13:18:43
>>671
最近、YAMLやJSONに人が流れてませんかね。
下手すりゃXMLはSGML, ASN.1の後を追うことになっちゃう。
XHTML→HTML5って流れもあるし。

675 :デフォルトの名無しさん:2009/01/23(金) 13:20:36
無知乙。HTML5はXHTMLでもある

676 :デフォルトの名無しさん:2009/01/23(金) 14:53:30
XMLでないHTMLは4で打ち止めでXHTMLオンリーのはず(by w3c)だったのに、
WHATWGが立ち上がって、W3Cの方向性を変えたんだよ。
詳しくは↓あたりを読んでね。
http://www.html5.jp/trans/whatwg_html5faq.html#What_is_the_WHATWG.3F

well-formedでないHTML排除は延期された。永遠に延期かもしれない。

677 :デフォルトの名無しさん:2009/01/23(金) 20:46:11
XMLって立ち上がりの時期はいけすかない感じだったけど
なんだかんだでスキーマとか数学的基礎とか処理効率とかについて
頭のいい人たちの研究が蓄積されてるんじゃないの?
それが流行でYAMLやJSONに置き換わるっていうとなんかもったいないなあ。

678 :デフォルトの名無しさん:2009/01/23(金) 21:07:01
XMLが苦もなく扱える人なら、Lispで事足りるんじゃないだろうか。

679 :デフォルトの名無しさん:2009/01/23(金) 23:45:11
>>676
そのドキュメントにもXHTMLシリアライゼーションのこと書いてあるだろ
HTML5でXHTMLが消える訳じゃない。XHTMLの未来もHTML5なんだよ
残念ながらXHTML2.0に希望はない

680 :デフォルトの名無しさん:2009/01/24(土) 00:14:40
span.xxsmall {font-size: xx-small; }
<span class="xxsmall">XHTMLの将来</span>

681 :デフォルトの名無しさん:2009/01/25(日) 22:28:26
Programming Scalaってサブタイトルにマルチコア云々って書いてある割にページ数は少なそう

682 : :2009/01/25(日) 22:42:31
amazon.co.jpでProgramming in Scalaが注文できるようになってるね。
在庫切れになってるけどカートには入れられる。

683 :デフォルトの名無しさん:2009/01/30(金) 19:24:22
すから↑
スカ↑ラ(ドラクエ風)

アクセントはどこよ

684 :デフォルトの名無しさん:2009/01/30(金) 19:40:34
どうでも良いことだが、俺にとってのドラクエ風はス↑カ↓ラ↓

685 :デフォルトの名無しさん:2009/01/30(金) 22:09:27
ス↓カ↑ラ↑といえばラ・スカーラ。
まだ「ディスコ」と言われていた時代だ。

686 :デフォルトの名無しさん:2009/01/31(土) 12:35:08
Odersky 氏が「スケイラでも可」のようなことを言ってたビデオがあったから、
スカ↑ラの方かと

687 :デフォルトの名無しさん:2009/01/31(土) 13:14:41
スカラはイギリス的
スケイラはアメリカ的
スカイラはオーストラリア的

688 :,,・´∀`・,,)っ-○◎●:2009/01/31(土) 21:24:08
scアァは日本的

689 : :2009/02/04(水) 10:00:11
Scala初心者なんですけど
val a = List(1,2,3,4)

とした後

a.foreach( println( _ ) )
a.foreach( x => println( x + 3) )

はエラーにならないのに

a.foreach( println( _ + 3 ))

はエラーになります。どうしてですか?

690 :デフォルトの名無しさん:2009/02/04(水) 13:01:34
a.foreach( println( x => x + 3 ) ) 
と展開さえてエラーになってるみたいだね。
理由や原理は分からないけど。

691 : :2009/02/04(水) 17:25:00
expanded functionなんたらっていうエラーメッセージはそういう意味なんですか。
この略記法みたいのは、展開のしくみがよくわからないから複雑なのには自重しときますか。
ありがとうございました。

692 : :2009/02/04(水) 17:40:31
 _ を使った式ががprintlnに対して展開されてるってことですね。foreachではなく。
そう考えるとa.foreach(println(_))はよくforeachに対して展開されてますね。


693 :デフォルトの名無しさん:2009/02/04(水) 21:19:14
どう展開されるかはコンパイラの気分次第ってことか?

694 :デフォルトの名無しさん:2009/02/04(水) 21:30:45
println( _ + 3 ) は「+ 3」を解決するために _ を評価しなければならなくなる
からでわ?
println( _ ) だと println を評価するまで _ の評価を遅延できるのに対して

695 :デフォルトの名無しさん:2009/02/04(水) 21:42:00
_が予約語ってどうなの?
困らない?

696 :デフォルトの名無しさん:2009/02/04(水) 21:51:03
_ 単独で変数名とかクラス名にするやつがいるとは思えないんだが。

697 :デフォルトの名無しさん:2009/02/04(水) 21:57:14
_の正確な意味を知るにはScala言語仕様の6.23 Anonymous Functionの
Placeholder Syntaxを読むのが良いと思う。特に英語圏のブログでScala
やってる人が多用してる気がするけど、正確な意味を解説した記事ってないんだよな。

不正確だけどおおざっぱな説明としては、_を囲む最も内側の式が無名関数化される。
だから、println(_)だと、(x) => println(x)になるけど(_を囲む一番内側の式がprintln(_)
だから)、println(_ + 3)はprintln((x) => x + 3)になる(_を囲む一番内側の式が_ + 3だから)
あと、無名関数化される式はsyntactic category(文法定義上の非終端記号みたいなもの)が
Exprである必要がある。

基本的に、_がどう展開されるかは純粋に構文的に決まり、型とかは一切関係しない。

698 :デフォルトの名無しさん:2009/02/04(水) 23:17:55
println((_)) とかやると内側の括弧で阻害できるのか?

699 :デフォルトの名無しさん:2009/02/04(水) 23:34:42
>>698
試してみるとわかるけど、それはできない。
仕様書にはproperly containsという文言があるんだけど
単に式を囲む(_)は構文解析で_と同じになっちゃって、
(_) properly contains _とはみなされないということだと思う。

700 : :2009/02/05(木) 00:11:19
>>697
おお、わかりやすい説明ありがとう。
それでちっとまた実験してみた。

val a = List(1,2,3,4);

a.map( x => x)
はエラーにならないけど

a.map( _ )
はエラーになった。

この場合は
a.map( _ + 3)
にするとエラーにならない。
なるほど。

701 :デフォルトの名無しさん:2009/02/05(木) 00:23:42
酔っぱらっているので一つだけ。(>>697の括弧が構文解析できないレベル)
Scalaの_は、C++のboost/bind.hppの_1, _2, _3から来ているんだと思う。
>>697が解説してくれているけどそっくり。おやすみ

702 : :2009/02/05(木) 00:32:11
しかし算術式はなにかとくべつなのかな?

a.filter( 2 < 1 + _ )

はエラーにならない。
1 + _ が最も内側の式ではなく 2 < 1 + _を最も内側の式と見てくれる。

でも
a.filter( (2).<( 1 + _ )  )

だと1 + _ を最も内側の式と見てエラーになる。

2 < 3 は (2).<(3)と同じことだと読んだような気がするけど 、上の場合は挙動が違う。

703 : :2009/02/05(木) 00:35:41
あ、でも

a.filter( 2 < 1 + _ )
はエラーにならないけど

a.filter( 2 < (1 + _ ) )
はエラーになる。
この場合は ( 1 + _ )が最も内側の式とみなされるから。

704 : :2009/02/05(木) 00:42:17
明示的にかっこでくくちゃうと、そこでもっとも内側の式とみなされるけど
演算子の優先順位のためにかっこがいらなければセーフなのか。

705 : :2009/02/05(木) 00:58:57
ただし明示的な括弧といっても ( _ )は意味がないl。 _ とおなじ。
それ以外の場合は括弧の段階で一番内側の式とみなされる。

706 :697:2009/02/05(木) 01:01:19
>>701
>>702
その辺の挙動は、>>697で最後にさらっと書いたsyntactic categoryというのが絡んでくる。
>>697では最も内側の式という風に書いたけど、実はもうちょっと正確に言うと、もっとも内側で、
syntactic categoryがExprの式が無名関数化される。

まず、
a.filter(2 < 1 + _)
についてだが、1 + _の部分だけではInfixExprとみなされる。その外側の
2 < 1 + _も同じくInfixExprだが、メソッド呼び出しの引数の位置に来ることによって
Exprに昇格(適当にでっち上げた用語だが)し、結果として、2 < 1 + _が(x) => (2 < 1 + _)
のように無名関数化される。

a.filter( (2).<( 1 + _ )  )

については、1 + _は同様にInfixExprだが、メソッド呼び出し引数の括弧の位置に
現れたことによって、Exprに昇格してしまう。そのため、1 + _が無名関数化される。

a.filter( 2 < (1 + _ ) )

でも、やはり1 + _はInfixExprだが、式をグルーピングする括弧があることによって、
Exprに昇格してしまう。そのため、1 + _が無名関数化される。

707 :デフォルトの名無しさん:2009/02/05(木) 01:01:43
_はどのくらい強いの?
括弧以外は突き抜けられるぐらい強いの?

708 :697:2009/02/05(木) 01:04:40
>>707
基本的にはメソッド呼び出しの引数の括弧 or 式のグルーピングの括弧が区切りになっているという
認識で良いと思う。あとは、使っているとなんとなくわかるようになってくる感じ。上では言語仕様の
記述を元に挙動を説明したけど、そこまで知っていなくてもまあだいじょうぶだと思う。

709 : :2009/02/05(木) 01:11:54
>>706
697さん、詳しくわかりやすくどうもありがとう!
すっきりして寝れます。

710 : :2009/02/05(木) 12:18:40
amazon.co.jpの洋書でScala本、ただいま在庫切れだけど注文できるようになってて人気がすごいぞ。

http://www.amazon.co.jp/Programming-Scala-Comprehensive-Step-step/dp/0981531601/ref=sr_1_2?ie=UTF8&s=english-books&qid=1233803774&sr=1-2

Amazon.co.jp ランキング: 洋書 - 455位 (洋書のベストセラーを見る)
各カテゴリー内でのランキング:

1位 ─ 洋書 > Computers & Internet > Programming > Java
2位 ─ 洋書 > Computers & Internet > Programming > Software Design, Testing & Engineering > Object-Oriented Design
2位 ─ 洋書 > Computers & Internet > Programming > Languages & Tools

すげー!

711 :デフォルトの名無しさん:2009/02/05(木) 12:33:07
>>710
米国での期待の大きさが現れてる。同時に、
Haskellの棺桶の釘を打つ音でもある。

712 :デフォルトの名無しさん:2009/02/05(木) 15:54:30
そういう二者選択は馬鹿げてると思うよ。

713 :デフォルトの名無しさん:2009/02/05(木) 15:58:15
>>712
あくまで、米国のソフトウェア界のはなし。

714 :デフォルトの名無しさん:2009/02/05(木) 16:55:08
> 米国のソフトウェア界





715 :デフォルトの名無しさん:2009/02/05(木) 23:21:10
>>712
洋書を買うのは物好きだけだろjk

現在のランク:
6位 ─ 洋書 > Computers & Internet > Programming > Software Design, Testing & Engineering > Object-Oriented Design
8位 ─ 洋書 > Computers & Internet > Programming > Java
28位 ─ 洋書 > Computers & Internet > Programming > Languages & Tools

716 :デフォルトの名無しさん:2009/02/06(金) 06:46:27
日本での順位に米国の話をレスとしたのがまちがい。>>711は撤回します。

717 : :2009/02/07(土) 15:09:56
ScalaにJavaみたいなenumないのですか?

Enumerationってのがあるみたいなのですが

object Main extends Application {

   object WeekDays extends Enumeration {
    val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
  }

  def isWorkingDay(d: WeekDays.Value) =
     ! (d == WeekDays.Sat || d == WeekDays.Sun)

   WeekDays filter (isWorkingDay) foreach { d => Console.println(d) }
}



printlnでの出力もMain$WeekDays(4)という形式です。
JavaのenumだったらFriとかよみやすい値です。メンバを加えたりもできました。

Javaのenum使えないのですか?

718 :デフォルトの名無しさん:2009/02/07(土) 15:51:00
多少コード量が増えるけど、

http://blogtrader.net/page/dcaoyuan/entry/erlang_plugin_for_netbeans_in
を参考にして、Weekdaysにメンバを追加するか、

abstract sealed class Weekdays
object Weekdays {
case object Mon extends Weekdays
case object Tue extends Weekdays
case object Wed extends Weekdays
case object Thu extends Weekdays
case object Fri extends Weekdays
case object Sat extends Weekdays
case object Sun extends Weekdays
}
val x: Weekdays = Weekdays.Mon
println(x) //Mon
のようにして、case objectを使う手段がある。

719 : :2009/02/07(土) 16:05:59
>>718

ブログのよりあなたのやり方のほうがJavaのenumっぽいですよね。
実質、個々のenum値が独自クラスのシングルトンになってるあたり。
でもJavaの場合はコンパイラが自動的にやってくれるので短く書けるけどScalaだとちょっと面倒ですね。
使いようによってはcase classのぶん便利なこともあるのかな。
ちょっと気になって質問したので、具体的にどう使うか目的があって質問したわけじゃないけど。

詳しくどうもありがとうございました。

720 :デフォルトの名無しさん:2009/02/07(土) 22:16:19
enumにメソッド追加ってかなりJava独自じゃないですか?
必要ない気がするんですけどJavaラーは活用してるんですかね。

721 : :2009/02/08(日) 20:04:19
2版のEffective Javaに活用した例があっておもしらかった記憶があるけど
自分自身はつかったことない。

722 :デフォルトの名無しさん:2009/02/08(日) 22:10:21
enumのメソッド追加は便利。
ステートパターンが書きやすい。

187 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)