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

【激突】関数型言語 VS オブジェクト指向言語2

■ このスレッドは過去ログ倉庫に格納されています
0001営利利用に関するLR審議中@詳細は自治スレへ2012/04/07(土) 21:26:47.61
一般的には、オブジェクト指向型言語が優勢でが
一部には関数型言語を崇拝している人もいます

どちらが上なのか、この際はっきりさせましょう

前スレ http://toro.2ch.net/test/read.cgi/tech/1331328955/
0344デフォルトの名無しさん2012/04/14(土) 05:58:16.50
それ以前に「使える言語機能を恣意的に制限する」アホを
排除しておかないと比較にも議論にもなんねーんだよ
0345デフォルトの名無しさん2012/04/14(土) 05:59:25.03
じゃあ、型的に間違ってるプログラムをコンパイルエラーにしてください、という問題はどうだろうか。

fizzbuzzのscheme多値版ね。マクロ使っちゃっちゃったけど。

(define-syntax fizz (syntax-rules () ((_ arg) (receive it arg (fuzzbuzz it "Fizz" 3)))))
(define-syntax buzz (syntax-rules () ((_ arg) (receive it arg (fuzzbuzz it "Buzz" 5)))))
(define fuzzbuzz
(lambda (arg name m)
(let* ((is-num (null? (cdr arg))) (s (if is-num "" (car arg))) (a (if is-num (car arg) (cadr arg))))
(if (= 0 (mod a m)) (values (string-append s name) a) (if is-num a (values s a))))))
(define main (lambda (_) (letrec ((loop (lambda (n) (if (<= n 30)
(begin (print (buzz (fizz n))) (loop (+ n 1))))))) (loop 1))))
0346デフォルトの名無しさん2012/04/14(土) 06:40:24.02
ループ禁止で再帰だけで書いてください、とかでも良いな
末尾再帰最適化の無い実装じゃスタックオーバーフロー
0347デフォルトの名無しさん2012/04/14(土) 06:51:51.42
>>325
組み込みクラスを弄るのはOK
組み込み演算子を弄るのはNG

何故?
0348デフォルトの名無しさん2012/04/14(土) 10:00:34.73
初学者といっても
1.プログラミングを学ぶことが目的
2.作りたいものがあって、その手段としてプログラミングが必要
で違う。

1なら関数型言語は良い選択
2ならオブジェクト指向言語やLLの方が早い

こういうスレの喧嘩は
1の人の多くは、プログラミングを座学として勉強しただけで実は何も作れない
2の人の多くは、作りたいものが動けばいいというだけでプログラミングに対する向上心がない

という現実を反映しているだけ。
0349デフォルトの名無しさん2012/04/14(土) 10:10:56.56
そしてモマエは
3向上心のカタマリのオレ様にケンカうってんのかーーー
カワネーゾ
0350デフォルトの名無しさん2012/04/14(土) 10:28:07.46
>>343
いまは人工的に作ったお題の信用がなくなってるんだよ
そこでまた中立でない人間がお題を出しても、紙屑のように無視されるんじゃないの
0351デフォルトの名無しさん2012/04/14(土) 10:47:19.60
>>306
QZってこんなスレまで見てるんだな
0352デフォルトの名無しさん2012/04/14(土) 11:03:19.87
>>350
>>290や>>325のような上から目線で変なルール押し付けてくるウザいヤツが
居なければ、言語ごとのアプローチの違いが見れて
遊びとしては面白いんだがなぁ
しかもウザいのに限って口だけでプログラム書けないんだ

あ、もしかして>>290や>>325がこのスレに書いたコード在る?だったら謝るけど
0353デフォルトの名無しさん2012/04/14(土) 11:31:51.96
すまんけどちょっと確認させてください。これまで出てきた関数型言語の回答で、
関数合成演算子(あるいは関数)を定義が必須な場合でも、関数 fizz だけ用いた
fizz 1 や fizz 3 はちゃんと組み込み型の数値や文字列である 1 や "Fizz" を返せるのでしょうか?
これって一応要件だと思うんですよね。C++ の回答についても同様です。
Ruby や JS 、Smalltalk の回答はすべてこれが出来ているみたいなんだけど。
0354デフォルトの名無しさん2012/04/14(土) 11:49:35.83
C++は型キャストをカスタマイズできるからそれで対応したら良いと思う。
FizzBuzzオブジェクトから文字列型と数値型へのキャストをそれぞれ用意すればよし。
0355デフォルトの名無しさん2012/04/14(土) 12:28:02.63
>>352
今でも十分おもしろいと思うよ。せっそうのない動的言語(OOといえばOOだけど、
ストラウストラップの抽象データ型OOでなくて、ケイの動的OO寄りの考え方)では
可能だけど、理論的にきっちりした関数型言語では実現不可な境界がはっきりしてきてて。
出来ないと分かっていることを出来ないときちんと理由付きで示せる勇気も見れるし。
他方で、動的言語でもすんなりできるとは限らないから各言語での工夫の仕方も興味深い。
0356デフォルトの名無しさん2012/04/14(土) 12:29:01.02
>>353
>>341だけど、関数fizz, buzz, gizzをそれぞれ単独で使用した場合をテスト。
> [fizz; buzz; gizz] |> List.map(fun f -> [1; 3; 5; 7] |> List.map f);;
val it : obj list list =
[[1; "Fizz"; 5; 7]; [1; 3; "Buzz"; 7]; [1; 3; 5; "Gizz"]]
0357デフォルトの名無しさん2012/04/14(土) 13:02:32.74
あ、すいません。F#さんを見落としていました。
F#以外の関数型言語の回答で、ですね!
わざわざの検証、いたみいります。
0358デフォルトの名無しさん2012/04/14(土) 14:04:34.17
スレッドローカルに状態を保持するのはいいアイデアですね。
0359デフォルトの名無しさん2012/04/14(土) 14:10:22.10
いいアイデアですねw
0360デフォルトの名無しさん2012/04/14(土) 14:42:43.34
>>353
>>340だけどテストしてみた

*Main> [map f [1,3,5,7] | f <- [fizz, buzz, gizz]]
[[1,Fizz,5,7],[1,3,Buzz,7],[1,3,5,Gizz]]
0361デフォルトの名無しさん2012/04/14(土) 14:50:32.97
>>353
ついでに>>283もテスト
正しく動かなかったので修正

fizzT f s = (\x -> Left x) . fizzT'
  where
    fizzT' n | f n == 0 = Right s
    fizzT' _ | otherwise = Right []

これで >>360と同じコードが動いた
03623612012/04/14(土) 15:07:31.88
面白かったのは>>283に>>360を試して動かなかったとき
ちゃんとコンパイル時に型エラーになったこと
Haskellの型システムやるじゃん、みたいな
0363デフォルトの名無しさん2012/04/14(土) 15:54:35.13
ねえねえ、1 から 3 までの fizz n の戻り値に対して、文字列なら全大文字化、整数なら 10 倍にして
map するコードを [1, 2, "Fizz"] に対して同じことをするコードとまったく同様に書いて
問題なく実行できるかどうか試しみててよ! クイズの要件をみたしていればできるよね!
もちろんいうまでもなく追加定義や修正は無しだよ。Ruby や F# のはもちろんできるよ!
03643402012/04/14(土) 16:01:06.17
>>360
fizz (HasA s n) = HasA (s ++ if mod n 3 == 0 then "Fizz" else "") (10 * n)
03653402012/04/14(土) 16:02:40.14
あ、ごめん>>363だった
それはさておき、後だしでルール追加するの本当に好きだね
0366デフォルトの名無しさん2012/04/14(土) 16:06:40.84
>>363
じゃあ、組み込みクラスをグローバルに汚染するのも禁止しようぜ
classbox等で一部に制限できるならアリ
0367デフォルトの名無しさん2012/04/14(土) 16:07:57.17
というか、ここのHaskellerはどうしてこうも要求仕様を読み取れないくせに
あまつさえ勝手な解釈で適当なコード書いてドヤ顔なの? バカなの? 死ぬの?
0368デフォルトの名無しさん2012/04/14(土) 16:11:06.66
>>367
誰もお前の頭の中なんて知らないし興味ないんだから
言わないと分からないっつーの
ここはお前の要求仕様を満たす場じゃねーし
馬鹿はお前

あと、まさかコードも書かずに議論参加してたとか無いよな
書いたコードのレス示せよ
俺は>>340書いたぞ
0369デフォルトの名無しさん2012/04/14(土) 16:16:29.12
(defmacro defun-fizz-buzz (name divisor)
`(defmacro ,name (form)
`(multiple-value-bind (int str) ,form
(values int
(if (= (mod int ,',divisor) 0)
(concatenate 'string str (string ',',name))
str)))))

(defun-fizz-buzz fizz 3)
(defun-fizz-buzz buzz 5)
(defun-fizz-buzz gizz 7)
0370デフォルトの名無しさん2012/04/14(土) 16:21:51.37
>>367
> ドヤ顔なの?バカなの? 死ぬの?
w
いまどき、こんな台詞をわざわざ書くやつがいるんだww
0371デフォルトの名無しさん2012/04/14(土) 16:23:54.35
勘違いしたふりして頓珍漢なコード出してきて、
言語や自分の発想の限界とかクリティカルなところはなんとか避けようとしているんだよ。
仕様を取り違えてるよってやんわりチェック方法をしめすと、
ルールを増やすな、後出しだ、仕様が欠陥だってなんやかやクレームつけて
相手が根負けして要求仕様のほうが変わるのを粘り強くじっと待つ戦略なんだ。
ある意味、賢いよ。
0372デフォルトの名無しさん2012/04/14(土) 16:26:54.36
お題提出者の解答ってもう出てるの?
0373デフォルトの名無しさん2012/04/14(土) 16:29:32.45
>>363
> map するコードを [1, 2, "Fizz"] に対して同じことをするコードとまったく同様に書いて

Haskellは静的型付けだから数と文字列を同じリストには入れられないんだ
そんなことも知らずに議論してたんじゃないよね?
0374デフォルトの名無しさん2012/04/14(土) 16:32:03.01
>>371

>>368
> あと、まさかコードも書かずに議論参加してたとか無いよな
> 書いたコードのレス示せよ

って書いてるのに示さないってことは、まさか本当にコード書いてなかったの?
0375デフォルトの名無しさん2012/04/14(土) 16:33:37.46
まさかの口だけ野郎説浮上www
0376デフォルトの名無しさん2012/04/14(土) 16:44:57.11
>>363は問題が頓珍漢だけど(静的型で [1, 2, "Fizz"] はねーよw)
最大限エスパーして書いてみた

>>283はこんな感じ

conv (Left n) = Left $ 10 * n
conv (Right s) = Right $ map toUpper s
main = do
  print $ map conv [Left 1, Left 2, Right "Fizz"]
  print $ map conv $ map fizz [1,2,3]

>>340はこんな感じ

conv (HasA s n) = HasA (map toUpper s) (10 * n)
main = do
  print $ map conv [1, 2, "Fizz" `HasA` 3]
  print $ map conv $ map fizz [1,2,3]
0377デフォルトの名無しさん2012/04/14(土) 17:03:29.49
>> xs = (1..3).map{ |n| n.fizz }
=> [1, 2, "Fizz"]
>> xs.map{ |x| case x when Integer then x*10 when String then x.upcase end }
=> [10, 20, "FIZZ"]
>> ys = [1, 2, "Fizz"]
=> [1, 2, "Fizz"]
>> ys.map{ |x| case x when Integer then x*10 when String then x.upcase end }
=> [10, 20, "FIZZ"]
0378デフォルトの名無しさん2012/04/14(土) 17:45:03.77
◆QZaw55cn4c が出てきて有耶無耶になってるけど
「Javaドカタはコード書けない」説はまだ有効
0379デフォルトの名無しさん2012/04/14(土) 17:57:01.51
◆QZaw55cn4c はドカタではないとでも
0380デフォルトの名無しさん2012/04/14(土) 18:26:18.94
Haskellでコード書くだけで天才になれた気がした15の夜
0381デフォルトの名無しさん2012/04/14(土) 18:49:30.59
敵はハスケラだけと思ってるところがウケるw
どんな言語使いから見ても口だけ野郎は最底辺のゴミだぞwww
0382デフォルトの名無しさん2012/04/14(土) 18:52:07.05
おまえもなw
0383デフォルトの名無しさん2012/04/14(土) 19:54:38.00
コード書けないドカタは「なでしこ」使えば良いんじゃないか?
運が良ければ日本語で書いた戯れ言が
実行されるかもしれないぞ
0384デフォルトの名無しさん2012/04/14(土) 21:39:02.30
>>383
お前は詳しそうだな、その言語。
興味持って使ってみたのか?w
0385デフォルトの名無しさん2012/04/15(日) 10:22:56.77
まだPythonは出てなかったので


class F(object):
    def __init__(self, f):
        self.fs = f if hasattr(f, '__iter__') else [f]
    def __call__(self, x):
        if isinstance(x, int):
            s = ''.join(f(x) for f in self.fs if isinstance(f(x), str))
            return x if s == '' else s
        else:
            return F(self.fs + [x])

fizz = F(lambda x: 'Fizz' if x % 3 == 0 else '')
buzz = F(lambda x: 'Buzz' if x % 5 == 0 else '')
gizz = F(lambda x: 'Gizz' if x % 7 == 0 else '')

print [fizz(buzz)(gizz)(x) for x in [1,3,5,7,15,21,35,105]]
0386デフォルトの名無しさん2012/04/15(日) 10:31:36.36
F#、さすがだな。
0387デフォルトの名無しさん2012/04/15(日) 10:48:20.05
>>385
可能なら、
gizz(buzz(fizz(105))) is "FizzBuzzGizz" となるようなヤツをお願いします。
0388デフォルトの名無しさん2012/04/15(日) 10:55:31.60
>>387
理由を聞いても良い?
Pythonでは>>385のほうがデコレータでも使えて良いんだけど……

@fizz
@buzz
def bizz(x):
    if x % 11 == 0: return 'Bizz'
    else: ''
0389デフォルトの名無しさん2012/04/15(日) 11:03:37.43
静的型言語にIntを返したりStringを返したりする関数って縛りがそもそも無理
0390デフォルトの名無しさん2012/04/15(日) 11:07:14.65
>>388
>>254
0391デフォルトの名無しさん2012/04/15(日) 11:08:32.55
PerlとかSchemeの、多値をうまく使ったのが一番エレガントかな。

RubyとかJSは、同じようなコードをStringとNumberの両方に生やすとか、
見事に汚い解だw
0392デフォルトの名無しさん2012/04/15(日) 11:13:32.41
関数を返す関数(カリー化されてりゃ普通)にケチがつくとか
スゲーなこのスレ
0393デフォルトの名無しさん2012/04/15(日) 11:16:23.31
>>390
ちゃんと「など」って書いてるぞー

> オープンクラス機構やメソッドのない言語では関数(buzz(fizz(3)) #=> "Fizz" など)で。

それとも高階関数は関数じゃないんですかー
0394デフォルトの名無しさん2012/04/15(日) 11:20:37.25
>>389
それだけじゃない。
継続の状態如何で関数に振る舞いを変えさせるとか
関数型には無理な事ばかり要求している。
悪意に満ちたクイズだ。
0395デフォルトの名無しさん2012/04/15(日) 11:23:20.66
>>394
素直に考えれば、オープンクラスのある言語が良いという
意見に持っていきたい問題だからね

でも出てきた解はRubyが一番汚いという
0396デフォルトの名無しさん2012/04/15(日) 11:25:11.88
>>389
型クラスとかってこういう時には使えないの?
0397デフォルトの名無しさん2012/04/15(日) 11:30:40.55
要求による。

問題の「#=> "FizzBuzz"」が意味しているものが、REPLでそのように表示されるもの、
という意味なら、Show型クラスでいいんだけど、String型([Char]型)を要求してるなら無理。
0398デフォルトの名無しさん2012/04/15(日) 11:32:07.68
静的型 vs 動的型スレ向きの問題だよね
0399デフォルトの名無しさん2012/04/15(日) 11:52:01.47
>>391
いやあ俺は>>341のF#(er)が一番エレガントだと思うぞ。
無茶な要求仕様も黙ってすべて満たしつつ、簡潔できれいなコード出してきてるし。
0400デフォルトの名無しさん2012/04/15(日) 11:57:38.79
>>399
ThreadLocalが一番エレガントって
どういうセンスしてんだよ
0401デフォルトの名無しさん2012/04/15(日) 12:04:48.59
#include <stdio.h>
#include <string.h>
int v,w,t;char buf[4<<10];void*fizz(void*n){if(!t&&!v){v=(int)n;t=!t;}
if(!(v%3))goto a;else if(!(w&0x7))goto b;else goto c;a:{size_t
(*f)(char*restrict,const char*restrict,size_t);f=(w&0x7)?strlcat
:strlcpy;w|=0x1;f(buf,"Fizz",4<<10);}goto c;b:{char b[2<<8];;;;;;;;;;;
snprintf(b,2<<8,"%d",v);strlcpy(buf,b,2<<8);}goto c;c:return buf;}void
*buzz(void*n){if(!t&&!v){v=(int)n;t=!t;}if(!(v%5))goto a;else
if(!(w&0x7))goto b;else goto c;a:{size_t/**/(*f)(char*restrict,const
char*restrict,size_t);f=(w&0x7)?strlcat:strlcpy;w|=0x2;f(buf,"Buzz",
4<<10);}goto c;b:{char b[2<<8];snprintf(b,2<<8,"%d",v);strlcpy(buf,b,
2<<8);}goto c;c:return buf;}void*gizz(void*n){if(!t&&!v){v=(int)n;t=!t;}
if(!(v%7))goto a;else if(!(w&0x7))goto b;else goto c;a:{size_t (*f)
(char*restrict,const char*restrict,size_t);f=(w&0x7)?strlcat:strlcpy;
w|=0x1;f(buf,"Gizz",4<<10);}goto c;b:{char b[2<<8];;;snprintf(b,2<<8,
"%d",v);strlcpy(buf,b,2<<8);}goto c;c:return buf;}int main(void){printf
("%s\n",gizz(buzz(fizz(105))));}
0402デフォルトの名無しさん2012/04/15(日) 12:22:36.47
>>368
>あと、まさかコードも書かずに議論参加してたとか無いよな

>>395
>でも出てきた解はRubyが一番汚いという

このスレの特徴まとめ
0403デフォルトの名無しさん2012/04/15(日) 12:34:01.13
>>399
グローバル変数ではまずいと考えてThreadLocalにしたみたいに見える
まずいという認識がありながら、それを上に報告しないのはおかしい
結局、要求に対する不平不満は正直に言えばいいんだよ
0404デフォルトの名無しさん2012/04/15(日) 12:52:12.22
コード書けないドカタとプログラマでは綺麗さの認識が違う
0405デフォルトの名無しさん2012/04/15(日) 13:06:57.34
そうだね
お前のコードかけないドカタって概念がおかしいけどねw
0406デフォルトの名無しさん2012/04/15(日) 13:29:07.47
>>405
あれ?まだこのスレに居たの?
派遣仕事で使い慣れたJavaを使って良いから
早くエレガントな解を出してくださいよwww
0407デフォルトの名無しさん2012/04/15(日) 13:32:57.13
くやしいんだねw
0408デフォルトの名無しさん2012/04/15(日) 13:55:54.00
仕事しろ。言語の勉強はするだけ無駄。

求められているのは動くアプリだ。
0409デフォルトの名無しさん2012/04/15(日) 14:23:06.70
そもそも関数としての体をなしてないのだから、
副作用を使わずにこのクイズは解けない。
よって純粋な関数型パラダイムでは対応不可。終了。
0410デフォルトの名無しさん2012/04/15(日) 14:32:35.61
Scalaならいろいろ駆使して書けそうだけどな
0411デフォルトの名無しさん2012/04/15(日) 14:38:59.15
>>393
この場合の「など」は、関数呼び出しにもいろいろありますよね、
buzz(fizz(3)) 、 (buzz (fizz 3)) 、buzz fizz 3 など―とかの「など」だと思われ。
0412デフォルトの名無しさん2012/04/15(日) 15:23:11.97
関数じゃないものを
関数型言語で作るには
どうしたらいいのだろうか?
0413デフォルトの名無しさん2012/04/15(日) 15:27:19.67
>>409
副作用なしに解いたSchemeさんが涙目です
0414デフォルトの名無しさん2012/04/15(日) 15:35:03.47
>>411
三つ目が>>385だね(カリー化されてれば)
それとも見た目だけの問題?
0415デフォルトの名無しさん2012/04/15(日) 16:42:00.03
F#でThreadLocal等の副作用もないバージョン。

type MainBuilder() =
    member this.Return x =
        x |> List.map (function
        | _, Some names -> box names
        | number, None -> box number)
let main = MainBuilder()

let makeFizzBuzz name condition (x : obj) =
    match x with
    | :? int as number -> number, if condition number then Some name else None
    | _ ->
        let number, names = x :?> int * string option
        number, if condition number then (defaultArg names "") + name |> Some else names

// fizz, buzz, gizzの定義は>>341と同じなので省略

> main { return [1; 3; 5; 7; 15; 21; 35; 105] |> List.map (fun x -> gizz(buzz(fizz x))) };;
val it : obj list =
  [1; "Fizz"; "Buzz"; "Gizz"; "FizzBuzz"; "FizzGizz"; "BuzzGizz"; "FizzBuzzGizz"]
0416デフォルトの名無しさん2012/04/15(日) 17:46:44.23
新ルール「カリー化禁止」
0417デフォルトの名無しさん2012/04/15(日) 17:53:43.12
>>415
mainがダウト、なんじゃないか?
0418デフォルトの名無しさん2012/04/15(日) 18:08:11.82
>>417
main { return ... } 部分をただのコードブロックとみせかけて
実は戻り値を変換しているという作戦だったのに、バレたか。
0419デフォルトの名無しさん2012/04/15(日) 18:31:37.86
Smalltalkが流行らないように関数型メインは流行らないよ
0420デフォルトの名無しさん2012/04/15(日) 18:34:04.58
ついに「流行らない」以外に縋るものがなくなっちゃったか
0421デフォルトの名無しさん2012/04/15(日) 18:34:51.92
副作用ありとは言え、唯一まともな解出しててF#△だったのに
この期に及んで汚ないチートとかなにこのものすごい残尿感。
0422デフォルトの名無しさん2012/04/15(日) 18:40:05.54
.NET発表時のHaskell.NETはどこに行ったんだよ?
0423デフォルトの名無しさん2012/04/15(日) 18:43:46.95
マクロ使っていいならそもそも多値なんぞ使わんでも楽勝だろ。
0424デフォルトの名無しさん2012/04/15(日) 18:47:39.47
FizzBuzzって流行ってるけど何が面白いの?
0425デフォルトの名無しさん2012/04/15(日) 18:52:45.85
低能はFizzBuzzすら書けないという事実が面白い
0426デフォルトの名無しさん2012/04/15(日) 18:53:02.18
>>423 具体的にドーゾ
0427デフォルトの名無しさん2012/04/15(日) 19:04:47.51
オープンクラスとか副作用有り等の
汚いコードだけが「合格」www

勝手に判定してる(コード書けない)バカのセンスが露呈してますな
0428デフォルトの名無しさん2012/04/15(日) 19:05:21.22
>>423
perl書いたのオレなんだけれどもさ、その通りなんだよな…
0429デフォルトの名無しさん2012/04/15(日) 19:08:10.88
C#とかも関数型言語のエッセンスを取り入れるけど
すげえ無理矢理くさくて笑えるw
関数型がオブジェクト指向を取り入れるのはもっと自然なのに

オブジェクト指向っていうかC系列はもう駄目なんだと思う
0430デフォルトの名無しさん2012/04/15(日) 19:18:55.29
守らなければならない資産がたくさんあるからな
そりゃ無理やりくさくもなるさ
0431デフォルトの名無しさん2012/04/15(日) 19:28:01.70
後付で入れなきゃならなくなる時点で失敗だったはずなんだけどなぁ。
最近のC#の機能なんてC#以前から概念として存在してたはずなのに。
必要ないという当初の目論見は外れてるわけだ。

というか、資産っていうのはC風の構文そのものなんだよね・・・
C風じゃないとヤダヤダいう人が多すぎてD言語とかいちいち作られてる気がする。

C++、Java、C#、D言語
このへんは全て老害でしょ。
0432デフォルトの名無しさん2012/04/15(日) 19:30:26.05
C#、D言語は設計に一貫した思想がないからアホっぽくなるのは仕方ない。
0433デフォルトの名無しさん2012/04/15(日) 19:41:07.47
fizz 1 -- "1"
fizz 3 -- "Fizz"
buzz 5 -- "Buzz"
buzz fizz 15 -- "FizzBuzz"
だったらHaskellでも解ける?
0434デフォルトの名無しさん2012/04/15(日) 19:45:23.42
可変長引数とかさーー
0435デフォルトの名無しさん2012/04/15(日) 19:50:00.84
>>431
C系列でまともなのはCだけ
0436デフォルトの名無しさん2012/04/15(日) 19:50:26.06
>>433
型の不整合が生じるから無理
0437デフォルトの名無しさん2012/04/15(日) 19:52:02.10
>>432
C#はどんどんダメな方向に向かってる気はするわー。
0438デフォルトの名無しさん2012/04/15(日) 20:01:50.15
Javascriptは結構好きなのよん > C系文法族
0439デフォルトの名無しさん2012/04/15(日) 20:11:47.98
>>406
>>303-304
0440デフォルトの名無しさん2012/04/15(日) 20:19:32.18
>>431
後付で入れてもらったのがScala、Clojure、F#でしょ
なんで後付を悪く言うのかな
0441デフォルトの名無しさん2012/04/15(日) 20:41:24.35
C#は言語設計に一貫性がなく節操のないところが最大の魅力
偉い人にはそれがわからんのです
0442デフォルトの名無しさん2012/04/15(日) 21:08:30.57
>>440
アホか
それらは最初から関数型言語として作られてるでしょ。
関数型は糞、オブジェクト指向最高ってスタンスで作ってたはずのもんが
なんで今更関数型の要素を入れようとするんだよ。
0443デフォルトの名無しさん2012/04/15(日) 21:16:51.80
>>439
オーバーライドした toString() を println() に暗黙に呼ばせるとかいう
使い古されたチートをキメ顔で出してこられても…。
new myInteger(3).fizz() が "Fizz" を返せるとか少しは挑戦しようよ。
■ このスレッドは過去ログ倉庫に格納されています