1read 100read
2011年10月1期プログラムプログラミング言語 Scala 7冊目 TOP カテ一覧 スレ一覧 削除依頼
・ 次のスレ
【自動】株式トレーディングシステム Part6【売買】
Perlを使って2ちゃんねるにHello Worldを書き込む
おはよう
Java⇔RDBのMapping-Frameworkを語るスレ Vol.5


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


1 :11/09/04 〜 最終レス :11/12/27
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の連載記事、各々で開かれた勉強会の資料などがあります。

2 :
>>1
乙なんだぜ!
「ERROR:Lvが足りなくてスレッド立て(ら)れません。」
とか言われてスレ立てられなかったんだぜ…。日に日に使いにくくなる2ch。
しかしこれ、"ERROR"が全角で"Lv"が半角という統一感の無さで憤死しそうになるな…。
あと次スレからリンクにはこれも追加しようぜ
プログラミング言語Scala 日本語情報サイト
http://sites.google.com/site/scalajp/

3 :
前スレの終わり方なんなの…

4 :
前スレのことは次スレに持ち込まないのが2chのルール

5 :
はい

6 :
そんなルールは初耳だなぁ

7 :
上手く使えば、いい感じで話題が切り替えられるのが
1000スレッド落ちシステムの特徴だとは思う

8 :
結局またモヒカンが来て
この定義はおかしいって騒ぐだけだろ?

9 :
>>2
前方互換性の考慮の結果だよ

10 :
なぜScala村にはモヒカン族が沢山居るのですか?

11 :
とんでもない!Scalaは初心者でもウェルカムですよ!!

12 :
そうやって騙すのはもう無理だと思うの

13 :
そんなにたち悪いモヒカンは居ないだろ。
JavaとかRubyのモヒカンのガチのキモさに触れたら、Scalaなんぞ平和そのもの。

14 :
そもそもScala周辺には人がまだ少ないから、、、。
ていうかScalaやってる人って、何作ってるの?
Webから情報収集するプログラム書きたいのだが、他言語に比べて情報が少なすぎる、、。

15 :
>>14
そのくらいならまずJavaで作ってみて、書き換えていけばいいのでは?

16 :
Scalaの総代将がモヒカン過ぎるのがいけないのでは?

17 :
C++はハゲだけど大丈夫だよ

18 :
中之条

19 :
REPLからJavaクラスを実行すると、その中の
URL url = Thread.currentThread().getContextClassLoader().getResource("log4j.properties")
という箇所で、urlにnullが格納されてしまうのですが、どなたか回避をご存知でしょうか?
(当然ながら、log4j.propertiesはクラスパス上においています。)
普通にコンパイルして実行すると、urlにはlog4j.propertiesのパスがちゃんと入るのですが…。

20 :
おまえらがそうやって新しい言語に飛びついてる間に、cを極めてニッチかつ専門的な分野でウマー

21 :
>>19
Thread.currentThread().getContextClassLoader()
で取得されるクラスローダが別物なので。
> val url = getClass().getClassLoader().getResource("log4j.properties")
とやるとちゃんと取得できます。

22 :
>>16
総大将になったつもりは無かったんですけど、モヒカン過ぎると色々摩擦を生む事自体は理解してます。
あまりモヒカン的になりすぎないようにしようとは思っているのですけど、人間、すぐには変われないですね…。

23 :
けーみずさん、スルーするのも大事w

24 :
総大将というより、最大限持ち上げて切り込み隊長だろww

25 :
>>22
限界集落のOCaml村に煽られてもスルーできるが、
同じJVM言語仲間のGroovy村に煽られたら戦争だろうが……!
って感じですかね?

26 :
>>14
情報が少ないならここで聞けばいいじゃん

27 :
他の言語がクソならdisってやりゃいいんだよ
馴れ合う必要なんてないね

28 :
>>27
そういう怖い人はScala使わないでください><

29 :
Scala ノ ヒンイ ガ 10 サガッタ

30 :
ここのモヒカンよ、これ読んで少しは見習えよ
http://journal.mycom.co.jp/articles/2011/09/05/efl2/index.html

31 :
>>30
キモいもん貼るなボケ

32 :
どっかに配布されているjarファイルをこんな感じで読み込もうとすると、
> scalac a.scala -cp path/*.jar
error: IO error while decoding ... with UTF-8
Please try specifying another one using the -encoding option
で数時間ハマりました。
正解は
> scalac a.scala -cp "path/*:."
だそうです。("path/*.jar:."もダメらしい)
エンコーディングとか関係ねーじゃん!

33 :
ぜんぜん関係ないですがこのスレ久々で、「モヒカン」の流れがわかりません。
誰か簡単に解説してちょ。

34 :
>>33
はてな村用語。
http://mohican.g.hatena.ne.jp/keyword/%E3%83%A2%E3%83%92%E3%82%AB%E3%83%B3%E6%97%8F
「対立した文化として→ムラ社会」なんて書いてあるけど、
モヒカンが集まってムラ社会形成してるよな。

35 :
>>34
thxです。
こんな用語かってに作られて、本家(native american)は迷惑してるだろな。

36 :
モヒ漢

37 :
引数に型Tをとって、Tを継承した型を返す関数って
どうやって書くんだっけ?

38 :
http://groups.google.com/group/clojure/browse_thread/thread/b18f9006c068f0a0?pli=1

39 :
>>37
お前モヒカン村で何聞いてるの?

40 :
>>38
ソースとテストケース出さずにそんな事言われても…

41 :
モヒカンならソースとテストケースで事実を示して反論しよう!

42 :
>>38
長いから要約して

43 :
>>42
Scalaの標準のアクター実装のせいで、負荷をかけるとOut of Memoryで落ちた
Clojureで書き直してみたら負荷かけても動くようになった
さらにコードも短くなった(行数:1,000行から260行、文字数:31kから11.5k)

44 :
>>37
動的型言語では簡単に出来るけど、Scalaでは出来ません。

45 :
そういえばScala-Swing使ってて、ComponentのpaintComponentをオーバーライドしてGraphics2Dを描画させる時に、
イベント処理でrepaintを呼ぶと以前描画したものが消えてしまうのの回避方法ってある?
例えで言うと、マウスでクリックした所に円を描くプログラムに関して、
新たにクリックすると直前に描いた円が消えてしまう感じ。
ここで聞くなって話なら申し訳ない。

46 :
>>45
描いた円を全て覚えておくか、メモリ上にビットマップ展開して、そこに円を描画。
paint(repaint含む)はメモリ上のビットマップを画面に描画するだけ
Java/scalaに限らず、GUI全般の問題やね

47 :
>>46
ありがとう。GUIプログラミングについてもっと勉強し直す。
スレチに近くてスマソ。

48 :
>>43
カッコだらけの時代遅れ糞言語なんて誰も使わねえよ、ばーかばーか
っていうのを翻訳して投稿しておいてくれ

49 :
>>44 >>37の意味がいまいちわからない。でもこれだけはいえる
動的言語にできるという意味でなら、scalaでもできる
以上

50 :
>>49
こんなことがしたいのでは?
Python
def newType(T):
    class Foo(T):
        pass
    return Foo
C++
template <class T>
class Foo : public T {
};

51 :
よくわからん

52 :
ゆろよろがTwitterのアイコン変えてつまらん
不細工を角度で誤魔化そうとするスイーツ臭はどこにいった

53 :
そういうのはヲチ板でやってくれ

54 :
だから、Scalaでこんなコードが書けたら良いなってことかと(実際は以下のようには書けない)
def newType[T:ClassManifest]() : ClassManifest[Foo[T]] = {
    class Foo[T] extends T {}
    return implicitly[ClassManifest[Foo[T]]]
}
def construct[T](t:ClassManifest[T]) : T =
{
    return t.erasure.newInstance().asInstanceOf[T]
}
val t = newType[Bar]()
val x = construct(t)
こっちはPython版
http://ideone.com/lNfZi

55 :
>>49「動的言語にできるという意味でなら、scalaでもできる(キリッ」
馬鹿過ぎワロタwww

56 :
静的動的でいろんな所を煽ってるいつもの人でしょ
相手にするだけ無駄

57 :
静的動的で煽り合いするスレどこいったんだ?
隔離スレとして機能してたのに

58 :
ScalaはRubyより劣る
Pythonより劣る
F#のような洗練された言語設計もない
どうやってつかえばいいの?

59 :
無理して使わなくていいんだよ^^

60 :
ジェネリックの型引数って継承できたらいいと思わない?
実体化したらそれで終わりなんて継承ツリーの中で使いにくい
自分と同じ型のメンバーを表すだけでも大変
抽象型を使ってみたが妙に不自然な書き方しか思いつかない
abstract class Base {
type TParent <: Base
var parent: Option[TParent] = None
}
class とり extends Base {
override type TParent <: とり
override def toString = "とり"
}
class とんび extends とり {
override type TParent <: とんび
override def toString = "とんび"
}
object AbstractTypeTest {
def main(args: Array[String]) = {
var とり = new とり { type TParent = とり }
とり.parent = Option(new とり { type TParent = とり })
println(とり.parent)
var とんび = new とんび { type TParent = とんび }
とんび.parent = Option(new とんび { type TParent = とんび })
println(とんび.parent)
}
}

61 :
>>55 馬鹿すぎるのはお前。そもそも自分の思い込みが完全にまちがっていることにまるできずいていないwww

62 :
>>61
「使うプログラミング言語により思考は制限される」
http://www.slideshare.net/yukihiro_matz/ruby-9183142
http://itpro.nikkeibp.co.jp/article/NEWS/20110909/368352/
つまり、静的厨の発想は制限されてるから
動的言語でしか出来ない事は思い浮かばないw

63 :
Rubyより劣るScalaを使うと思考が制限されるよ

64 :
>>62
静的言語でしかできないこともあるから
両方やれば一番いいんだよな

65 :
心を落ち着けて>>56を読むんだ

66 :
バイトコード操作で実行時に引数の型を継承したクラスを生成って言う風になら出来るがちょっとずれるか

67 :
Rubyのような幅広い概念を取り込んで
いない言語なんてつかっちゃダメだよなぁ

68 :
まあアンチがいるだけ言語発展してる証拠にもなるし微笑ましい対応で

69 :
>>68
モヒカン言語らしくしろよ

70 :
動的言語の方がより制限されていることにまだきづいていないようだなww

71 :
>>69何故俺がD 言語住民と…!

72 :
動的言語+型+静的型チェック=静的型付け言語
と考えれば、静的型付けの方がリッチだな。
いらないときは静的型チェックをはずせばいいだけ。

73 :

74 :
scala好きだけどIDEとか未熟だから止めたとかいう英語の記事かなんかが紹介されてたけど、みつけられません。
確かコンパイラ系を作ってる人の文章で、Javaと別のtoolに戻ったとか言ってました。
どんなtoolか知りたいので、もう一度その記事を教えて下さい。

75 :
>>70>>72
じゃあ、Dumpクラスを継承したクラスの全ての公開メソッドに
引数と戻り値を出力する処理を追加するようなDumpクラスを
Scalaで書いてみてよ
動的言語なら10行くらいで書けるから

76 :
>>75
っ AspectJ

77 :
bytecode manipulationなんて卑怯ですう><

78 :
>>77
そんな君にはdynamic proxy。

79 :
何でも使っていいからScalaで書いてみなよ

80 :
そもそもLoggingのweavingを、言語のネイティブな機能だけを使って10行で書けると何かメリットがあるのか。

81 :
さすがモヒカン言語
コードは書けないが口だけは一人前

82 :
Scalaだけでは書けないよ、うん、終了。
で、それが実用においてどういうデメリットがあるの? って聞いてるんだけど。

83 :
またモヒカンが暴れてる

84 :
>>60
暗黙的変換を使って少しましな書き方ができた
でも素直じゃない
class HasParent[TParent <: Base](any: TParent) {
def parent = any.parent
def parent_=(p: TParent) = any.parent = p
}
abstract class Base {
var parent: Base = _
}
class とり extends Base {
override def toString = "とり"
}
class とんび extends とり {
override def toString = "とんび"
}
object AbstractTypeTest {
implicit def toHasParent[T <: Base](any: T): HasParent[T] = new HasParent[T](any)
def main(args: Array[String]) = {
var とり = new とり
とり.parent = new とり
println(とり.parent)
var とんび = new とんび
とんび.parent = new とんび
println(とんび.parent)
}
}

85 :
>>83
自分の思い通りにならないとモヒカンのせいにするのはよくないな。

86 :
スカラって10回言って。
スカラ
スカラ
スカラ
スカラ
スカラ
スカラ
スカラ
スカラ
スカラ
スカラ
巣から落ちた鳥は?
カラス!

87 :

88 :
>>60
型引数「を」スーパークラスから継承したい場合は、まさに抽象型使えってのがScala流かと思います。あと、
ジェネリックで型引数を継承できるようにしたとして、ややこしくなるだけな気がします。型引数はメンバ
じゃないので、本来継承できるべきものじゃないですし。
あと、ここで「とび」や「とんび」クラスをさらに継承する必要が無いなら、
override type TParent <: とび
じゃなくて、
override type TParent = とび
にしてしまった方がいいのではないかと。そうすれば、new とび { type TParent = とび } じゃなくて、単にnew とび
と書けますし。

89 :
スクルト

90 :
モヒカンだ助けてくれぇ

91 :
みんな飽きてるのにずっとモヒカン言ってるのっていつもの知的障害の人?

92 :
>>88
ありがとうございます
override type TParent = とび
継承する必要がないのならこの方がよいのはわかります
それだと継承の可能性を閉じてしまいますのであえてあの書き方にしました

93 :
変数の変位(代入互換性)の問題は残るのですが、
こんな書き方が許されたらと思いました
abstract class Base {
type TParent <: Base
var parent: Option[TParent] = None
}
class とり extends Base {
override type TParent = とり //ここで指定しても派生クラスで継承できる
override def toString = "とり"
}
class とんび extends とり {
override type TParent = とんび //ここで指定しても派生クラスで継承できる
override def toString = "とんび"
}
object AbstractTypeTest {
def main(args: Array[String]) = {
var とり = new とり
とり.parent = Option(new とり)
println(とり.parent)
var とんび = new とんび
とんび.parent = Option(new とんび)
println(とんび.parent)
}
}

94 :
60,88→60,84 間違った失礼

95 :
静的型チェックはずせばいいだけw

96 :
>>94
ゴミだから間違えるんだよな
お前みたいな奴はプログラムで変なミスするよ
むいてない 死んだほうがいい しんだほうが いい

97 :
>>96
welcome to http://hibari.2ch.net/test/read.cgi/tech/1312201995/

98 :
Scalaだけでは書けないよ、うん、終了(キリッ

99 :
http://krautchan.net/files/1315760995001.jpg
↑糞言語の開発者 メガネ、ハゲ、ヒゲなどが特徴
http://lamp.epfl.ch/~odersky/images/Martin.JPG
↑神言語の開発者 なんというナイスガイ!

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 削除依頼
・ 次のスレ
【自動】株式トレーディングシステム Part6【売買】
Perlを使って2ちゃんねるにHello Worldを書き込む
おはよう
Java⇔RDBのMapping-Frameworkを語るスレ Vol.5