1 :uy2011/06/20(月) 01:06:27.48
548 :uy ◆KOAgYBL/Xg 2011/06/26(日) 11:03:54.73
>>1-10000
っっっっっはあwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww?
3 :デフォルトの名無しさん2011/06/20(月) 01:11:41.95
このスレは、大都会が占拠したけぇの、
これからこのスレに書き込んだヤツは漏れ無く
大都会都民じゃけぇの。
4 :デフォルトの名無しさん2011/06/20(月) 01:26:26.73
いろいろウルサイこという上がいるとき → Java
そこそこ自分できめちゃっていいとき  → Scala
おれおれツール            → groovy
8 :デフォルトの名無しさん2011/06/20(月) 01:53:41.94
>>4
もう飽きて面倒くさいとき → BeanShell
5 :デフォルトの名無しさん2011/06/20(月) 01:34:19.34
Java育ちの00年グラマーは、どう風呂敷を広げようが所詮Javaの井戸からは出られないのか。
7 :デフォルトの名無しさん2011/06/20(月) 01:41:46.44
 型云々じゃなく、もっと実行時メタ機能の方向で動的言語は語れないか?
10 :デフォルトの名無しさん2011/06/20(月) 07:40:10.15
また不毛なスレか…

言語自体が動的と静的の両方いけるようになりつつあるこのご時世に何やってんの
12 :デフォルトの名無しさん2011/06/20(月) 07:52:02.57
>>10
両方できる言語であっても動的型付けで書いた箇所については
柔軟性が得られる代わりに静的な型安全のメリットは得られなくなる
静的と動的がトレードオフの関係であることは従来と変わらないよ
13 :デフォルトの名無しさん2011/06/20(月) 08:13:37.88
> 言語自体が動的と静的の両方いけるようになりつつあるこのご時世に何やってんの

動的言語は静的いけませんw
14 :デフォルトの名無しさん2011/06/20(月) 08:33:13.54
>>13
動的言語で安全なプログラムが組めるPGは
静的/動的両方使える言語でも安全に組める

一方、動的言語じゃ安全なプログラムを組めない
Java土方には使いこなせない

それだけの話
15 :デフォルトの名無しさん2011/06/20(月) 08:47:39.14
>>13
「動的な機能を持つ言語」が常に動的に実行されるとは限らない。
「全部でなくてもいいのなら」静的に整合性チェックをすることは可能だ。
245 :デフォルトの名無しさん2011/06/24(金) 15:17:36.88
#!/usr/bin/perl -w
$_='while(read+STDIN,$_,2048){$a=29;$b=73;$c=142;$t=255;@t=map{$_%16or$t^=$c^=(
$m=(11,10,116,100,11,122,20,100)[$_/16%8])&110;$t^=(72,@z=(64,72,$a^=12*($_%16
-2?0:$m&17)),$b^=$_%64?12:0,@z)[$_%8]}(16..271);if((@a=unx"C*",$_)[20]&48){$h
=5;$_=unxb24,join"",@b=map{xB8,unxb8,chr($_^$a[--$h+84])}@ARGV;s/...$/1$&/;$
d=unxV,xb25,$_;$e=256|(ord$b[4])<<9|ord$b[3];$d=$d>>8^($f=$t&($d>>12^$d>>4^
$d^$d/8))<<17,$e=$e>>8^($t&($g=($q=$e>>14&7^$e)^$q*8^$q<<6))<<9,$_=$t[$_]^
(($h>>=8)+=$f+(~$g&$t))for@a[128..$#a]}print+x"C*",@a}';s/x/pack+/g;eval
16 :デフォルトの名無しさん2011/06/20(月) 09:12:51.79
全体の安全性を語ってるのに個人の資質に還元しようとする。
頭悪いの?
17 :デフォルトの名無しさん2011/06/20(月) 09:18:08.98
>>16
全体の安全性って何?
一部のPG(Java土方)が低能すぎて動的言語で
安全なプログラムを組めないのは事実だとしても、
それをスレタイのような一般論に拡張すんなよ
18 :デフォルトの名無しさん2011/06/20(月) 09:28:03.26
動的言語が広まった理由の一つには、自動テストがしやすいからって側面がある。

そもそも「静的チェックで全体の整合性をチェックできる」ってのが幻想なんだよ。
ビルドエラーだけで全ての問題が解決できるならテストは不要なはずだろ?

実際には静的動的の両方で自動や手動のテストを行うわけだ。

この部分で動的言語は静的言語に比べて良い仕事をする。

CやC++ではABIが弱すぎてテストの自動化で不利だし、
Javaではリフレクション周りのコードがかったるくて重量級のフレームワークの出番になる。
たとえば、import不可のinterfaceをコールバック引数に持つメソッドの呼び出しとかな。

これが動的言語だと、
「モジュールを公開するときはテストコードもセットにするのが当然」という状態になっている。
perlですらそうだ。 http://gihyo.jp/dev/feature/01/test-perl
256 :デフォルトの名無しさん2011/06/24(金) 16:33:59.72
多分このスレで一番スレタイに近いこと言ってるのは>>18

テストを普通に書けば動的言語でも安全だし、
テスト不足なら静的言語でも危険だろう。
19 :デフォルトの名無しさん2011/06/20(月) 10:17:12.39
言語の規格や各処理系の実装や開発者層の問題ばかりで
動的・静的であること自体に起因する問題が皆無
21 :デフォルトの名無しさん2011/06/20(月) 10:27:50.30
静的型付けと動的型付けはトレードオフで
メリットがデメリットを上回るなら動的言語を使えば良い
安全性もテストで確保出来る

たったこれだけのことなのに、Java土方が「Java以外認めん!」
って鼻息荒くしてるだけだろ
22 :デフォルトの名無しさん2011/06/20(月) 10:39:55.59
大規模開発じゃデメリットが顕著って話なのに
28 :デフォルトの名無しさん2011/06/20(月) 11:18:21.26
>>22
文章に"土方しか集まらないから"が抜けてますよ?
23 :デフォルトの名無しさん2011/06/20(月) 10:53:27.03
大規模開発の問題点ってコードの整合性よりデータの整合性の方が大きいだろ?

データに関して言えば、SQL自体が動的言語だからなwwww
コードに関して言えば、動的言語を使うと規模を大幅に縮小できるケースもある。
25 :デフォルトの名無しさん2011/06/20(月) 10:55:03.02
ほんとに静的型言語らしいご利益があるのってMLとかHaskellぐらい。
Java程度ならCとたいして変わらん。
26 :デフォルトの名無しさん2011/06/20(月) 11:13:33.69
MLとかがバグが出にくいのは副作用が無い/少ないから。
だからユニットテストが機能しまくる。
27 :デフォルトの名無しさん2011/06/20(月) 11:16:55.07
動的言語でも副作用のある関数に!付けたりして
区別するようにしてるとバグが出にくい。
29 :uy ◆yyC0rYWEq2 2011/06/20(月) 15:48:45.30
ひじかたわきすぎ


動的言語だと、行数小さくなるから

 JAVA(笑)で作った物と比べて格段に小さくなって
 JAVA(笑)でかかれたら大規模に見えても
  動的言語(神)かかれたそれは大規模とみなされないことってあると思う
 JAVA(笑)だと動的言語では本来かかなくてもいいコード沢山かいているとおもうし

そもそも
 JAVA(笑)はひじかた言語でしょ?
 ひじかたを効率よく使う為に、三マイクロ社が作った奴隷用言語でしょ?
 趣味でJAVA(笑)やってる奴なんて・・・?


 ???
35 :デフォルトの名無しさん2011/06/20(月) 17:21:44.38
>>29
そこでなぜ、C#やC++と比べ無いのだろう。。。。
30 :デフォルトの名無しさん2011/06/20(月) 16:01:27.96
作った奴等がLisp無双だったんで、その反動から一周遅れぐらいでC言語っぽく
なったのがJava。ポストCobolみたいになったのはたまたまのなりゆきだろう。
31 :デフォルトの名無しさん2011/06/20(月) 16:37:33.29
GoslingはLisperじゃないと思うが

それにJavaは明らかにポストC++を狙ってたと思う
C/C++に似てるのは偶然じゃない
32 :デフォルトの名無しさん2011/06/20(月) 16:50:11.74
見たことないから知らないんだけど、
Gosling EmacsのMock LispはLispではなかったのだろうか。
34 :デフォルトの名無しさん2011/06/20(月) 17:04:57.97
しかも実装はCだしな
もうEmacs使うのやめようぜとか言ったり、
あんまりLisp好きじゃ無い印象
36 :デフォルトの名無しさん2011/06/21(火) 01:04:40.49
動と静をあわせ持った言語って無いの?
43 :デフォルトの名無しさん2011/06/21(火) 23:15:10.03
>>36
> 動と静をあわせ持った言語って無いの?

それは静とみなされるw
41 :デフォルトの名無しさん2011/06/21(火) 21:19:06.50
そうなんだよね
.NETってものがあるのに、JAVAがそれ無視して突っ走る理由が意味不明
素直に負けを認めて消えろよJAVA
たとえ自分たちがどれだけ先進したもの作ったとて、
この世界では一瞬で真似されるんだから、「商売」が成り立ってること事態奇跡であって
マジでレベルの高い奴らに目を付けられていない瞬間にしか儲けられない、とても運のいいことなんだよ
.NETを触る新言語を作るならまだしも、それ以外はもういいです
古い概念をいつまでも大事にしているJAVAは消えてほしい
44 :デフォルトの名無しさん2011/06/21(火) 23:18:12.75
動的言語なら静的言語の半分以下の量でコーディングできるって
豪語していたやつがいたから、

じゃあ、なんで半分の時間でできないの?
給料も半分でいいよね?って聞いたら
ブチ切られたw
50 :デフォルトの名無しさん2011/06/22(水) 08:56:28.75
>>44
Java土方に比べたら時間も半分どころじゃないと思う
ていうか、Java土方ってまともにプログラミングできるの?www
46 :デフォルトの名無しさん2011/06/22(水) 02:59:23.46
書いた行数が短いから動的言語は有利と
言ってるやつがいるからバカにされてるだけだよw
47 :uy ◆yyC0rYWEq2 2011/06/22(水) 04:36:49.28
ただでさえ巨大なプログラムに
やたら複数行に渡ったコメントかいてるソース多いからな
ソースコードの中に含めなくても良いデータや、
そのプロジェクト内のライブラリフォルダを作るべきようなものまで散らかってると殺意覚える
読みにくいから行数を減らす努力しろと
関数の手前にかかれたコメント読んだ所で、結局「わかった気」になるだけで
本当にソース理解する為にはコメントではなくソースを読まなければならない
それかせめて別拡張子のソースコードにするとかさ
未だに行数気にしてる奴多いだろ
10万超えのソースコードってソース読んでると大抵、肥大している原因はコメント量と
外部ファイルにしておくべきデータをソース内に入れてることにある
俺は10万行もかいてるぜ(キリッ) ですかあ?
ぼくはウィンドウシステムからテキストエディタ作ってもそこの実装部分300行程度しかないよ
SHIFT,CONTROL,END,HOME,BACKSPACE,SPACE,DELETE,PAGEUP,PAGEDOWN,大文字小文字,各種,記号入力も対応させてその程度
静的言語でやったら10倍に膨れ上がると思う

実際、動的言語でかいたらソースコード量は半分どころの削減ではなく
静的言語と違ってリファクタリングしていけば無限に縮まるから( メタまでやっていいなら限界なし )
どの程度まで「動的にコードを生成」やっていいのかによる
48 :デフォルトの名無しさん2011/06/22(水) 07:13:21.00
などと、長いプログラムが読めないバカが申しており
51 :uy ◆yyC0rYWEq2 2011/06/22(水) 10:36:04.24
>>48
残念ながら客観的にみても長いプログラムかくほうがバカっすよ・・・
短くしないほうがかくのは簡単だからねぇ

Aクラス、Bクラス、Cクラスとあって、それぞれの共通データがあるとき
君たちゴミは一階層上にDクラスを作るんだと思うけど、

これはリファクタリングした場合、ひとつのクラスにすることが出来る
そうするとクラス数は4分の1、ソースコード量は、A〜Cのクラスを1つにまとめた時点で最低でも3分の1にはなってる

この手のリファクタリングは大変だから静的言語じゃまずやんねーよ
それぞれの引数の型や戻り値とか色々変えなきゃならなくなるんだから
流石に面倒くさいを通り越して効率が悪い
52 :デフォルトの名無しさん2011/06/22(水) 10:43:52.04
javaコードをscalaコードにしたら1/3ぐらいは余裕なんで
動的な言語のほうがが静的な言語よりコード量が云々っていう意見が無くなる未来がそのうちくるかもね
まあこなそうだけど
53 :デフォルトの名無しさん2011/06/22(水) 10:51:30.30
scalaは別にダックタイピングはサポートしてないからな。
関数オブジェクトがあるのと、型の生成と推論がしやすいだけで。
54 :デフォルトの名無しさん2011/06/22(水) 11:00:39.46
だからコード量が短くて済むってことはプログラミングの粒度が粗いってことだと何度(r
55 :デフォルトの名無しさん2011/06/22(水) 11:10:21.07
>>54
正規表現で一発ってコードとちまちま文字列操作してるコードは粒度おんなじ。
57 :uy ◆yyC0rYWEq2 2011/06/22(水) 13:14:55.91
>>54
ハッアアアwWw??www???
自分が冗長なコードかいてることに、
そういう見苦しい良いわけ言うのやめろよ・・・・・
おまえみたいなゴミが何をいったところで動的言語よりもコード量が増えるっつうのは静的言語の負けてる部分だってのに
それを・・・・・・・wwwwwwwwwwwwwwwww


56 :デフォルトの名無しさん2011/06/22(水) 11:32:28.10
scalaはStructural Subtypingっていう静的ダックタイピングみたいな機能あるけど全然使われてない
C#のusingマネるコードでしか見たことないな
62 :デフォルトの名無しさん2011/06/22(水) 16:20:11.46
>>56
型の構造同値、なぜか流行らないよな。
Modula-3,Ocamlでもそうだった。
なぜだろ?
58 :デフォルトの名無しさん2011/06/22(水) 14:08:32.26
粒度が粗いってことはファンクション単位のスニペットの流用がやり辛いってことなんだよん
大味なアプリケーションしか書けない&動作が緩慢で小回りがきかない巨像。それが動的言語の正体。
232 :デフォルトの名無しさん2011/06/24(金) 11:33:18.35
>>229
>>58のいう「スニペットの流用」がどれだけやり易いかを
コードを例にして議論してる

もし、>>58のいうようにスニペットの流用が静的言語の方が優れてるなら、
既存のコードから少ない修正で別の用途にも使えるはず
59 :デフォルトの名無しさん2011/06/22(水) 14:15:41.26
コード無しだと水掛け論だね

ま、簡単なところで、一昨日Pythonスレで何故か盛り上がった
辞書の辞書にリスト入れるケースがどれくらい書き易いか
やってみたら?
ttp://hibari.2ch.net/test/read.cgi/tech/1305217361/287
64 :デフォルトの名無しさん2011/06/22(水) 16:38:46.07
>>59
// Java

import java.util.*;
class Foo
{
    public static void main(String args[])
    {
        HashMap<String,HashMap<String,LinkedList<String>>> hash =
            new HashMap<String,HashMap<String,LinkedList<String>>>();
        HashMap<String,LinkedList<String>> h;
        if (hash.containsKey("a") && hash.get("a") != null) {
            h = hash.get("a");
        } else {
            h = new HashMap<String,LinkedList<String>>();
            hash.put("a", h);
        }
        if (h.containsKey("b") && h.get("b") != null) {
            h.get("b").add("111");
        } else {
            String[] s = {"111"};
            h.put("b", new LinkedList<String>(Arrays.asList(s)));
        }
    }
}
65 :デフォルトの名無しさん2011/06/22(水) 17:53:58.40
>>63
そのテストを用意するのが動的言語では効率いいからな。
静的言語ならテスト不要になるわけでもない。

>>64
>hash.containsKey("a") && hash.get("a") != null
これは単に冗長。 hash.get("a") != null だけでいい
ほかにもわざとやってるんじゃないかと思うくらい冗長に書いてある。
191 :デフォルトの名無しさん2011/06/24(金) 02:02:05.19
>>158を静的動的関係ないって言ってる人たちは>>60とか>>64の段階でそれに突っ込んでれば
こんな話にはならなかったのにねえ。
60 :デフォルトの名無しさん2011/06/22(水) 14:26:32.67
# Python
from collections import defaultdict
hash = defaultdict(lambda: defaultdict(list))
hash['a']['b'].append('111')

# Ruby
hash = Hash.new{|h,k| h[k] = Hash.new{|h2,k2| h2[k2]= []}}
hash['a']['b'].push('111')

# Perl
push(@{$list{'a'}{'b'}}, '111')
77 :デフォルトの名無しさん2011/06/22(水) 19:33:17.88
>>60
Ruby や Perl の push と Python の append て同じような動作なの?
push はリストの先頭に、append はリストの最後に加えるイメージ。
そのどれも詳しくないけど。
79 :デフォルトの名無しさん2011/06/22(水) 19:40:11.85
>>77
全部末尾に追加
82 :デフォルトの名無しさん2011/06/22(水) 21:51:21.14
>>77
Perlのpush/popは末尾、unshift/shiftが先頭
128 :デフォルトの名無しさん2011/06/23(木) 08:42:03.89
>>124
ちょっとしたコード書くだけで>>75みたいになる言語じゃ
テストなんて面倒くさすぎるのかもしれんが
同じコードが動的言語だと>>60だからね
そりゃテスト書いてもおつりが来るよ
131 :デフォルトの名無しさん2011/06/23(木) 08:48:00.90
>>128
テスト書いてみてよ
132 :デフォルトの名無しさん2011/06/23(木) 09:07:46.44
>>131
本当はtest()にずらずら書くけど、それは長くなるから


import unittest
from collections import defaultdict
from anntools.validation import *

@validate(k1=Str, k2=Str, v=Str)
def foo(k1, k2, v):
    hash = defaultdict(lambda: defaultdict(list))
    hash[k1][k2].append(v)

class TestFoo(unittest.TestCase):
    def test(self):
        foo('a', 'b', '111')
        self.assertRaises(ValidationError, foo, 'a', 'b', 111)
        self.assertRaises(ValidationError, foo, 0, 'b', '111')
        self.assertRaises(ValidationError, foo, 'a', 0, '111')

if __name__ == '__main__':
    unittest.main()
628 :デフォルトの名無しさん2011/06/26(日) 17:50:13.96
>>626
unittestで検索したら>>132があったよ
63 :デフォルトの名無しさん2011/06/22(水) 16:28:24.74
ダックタイピングはコード短くなるしお手軽だけど、効率に目をつぶり、問題をテストに押し付けてるだけ。
66 :デフォルトの名無しさん2011/06/22(水) 18:05:23.43
import java.util.*;

public class Test1 {
 void foo(String k1,String k2,String v){
  HashMap<String,HashMap<String,List<String>>> mm = new HashMap<String,HashMap<String,List<String>>>();
  HashMap<String,List<String>> m = mm.get(k1);
  if(m==null) mm.put( k1, m = new HashMap<String,List<String>>() );
  List<String> l = m.get(k2);
  if(l==null) m.put( k2, l = new ArrayList<String>() );
  l.add(v);
 }
}

せいぜいこんなとこか。
でも Autovivification の有無って静的動的関係なくね?
86 :デフォルトの名無しさん2011/06/22(水) 23:59:34.80
>>83
>>66のfoo()をPython2.7で型チェック含めて書いてみた

from collections import defaultdict
from anntools.validation import *
@validate(k1=Str, k2=Str, v=Str)
def foo(k1, k2, v):
    hash = defaultdict(lambda: defaultdict(list))
    hash[k1][k2].append(v)

foo('a', 'b', '111')
foo('a', 'b', 111) # Error!
115 :デフォルトの名無しさん2011/06/23(木) 08:03:25.28
型チェックとか範囲指定とかは必要なら>>86みたいに書いてるよ俺は
あとはPythonに付いてる標準のunittest使ってるわ
119 :デフォルトの名無しさん2011/06/23(木) 08:06:41.85
>>115
動的言語は型チェックってすることが多くないからなあ
むしろインタフェースに重点を置いて
引数はreadってメソッド持ってる?って調べることが多い

テスト文化の先端を行くRuby使いはいませんか
120 :デフォルトの名無しさん2011/06/23(木) 08:07:03.23
>>86
これ書くくらいなら
静的言語使ったほうがいいような
121 :デフォルトの名無しさん2011/06/23(木) 08:14:54.12
>>120
本当に必要なとこだけ書くんだよ
あとデコレータ駆使すれば型以外にも様々なチェックが
短いコードで出来る
123 :デフォルトの名無しさん2011/06/23(木) 08:18:32.21
>>121
本当に必要なとこってどうやって決めるの?
判断ミスしたりしないの?
124 :デフォルトの名無しさん2011/06/23(木) 08:30:42.16
>>121
そんなんだから動的言語は信頼性が低いとかバグが多いとか言われるんだよ。
動的言語でWebサイト作ってインターフェイスのバグによって決済が行われず、
訴訟問題に発生した例も知ってる。
バグの原因はメソッド名のタイポだぜ、あほらしい。
126 :デフォルトの名無しさん2011/06/23(木) 08:38:47.13
>>123
公開してるインターフェースでかつ
総称的な振る舞いが期待されない関数だけに
チェック付けてるな

判断誤りの可能性はあるが、俺は問題になったこと無い
127 :デフォルトの名無しさん2011/06/23(木) 08:39:28.47
>>124
お前のようなアホはSQLインジェクションで氏ね
140 :デフォルトの名無しさん2011/06/23(木) 10:20:14.24
>>86
これってコンパイル時にエラーになってくれるの?
146 :デフォルトの名無しさん2011/06/23(木) 15:12:52.48
>>140
無理
248 :デフォルトの名無しさん2011/06/24(金) 15:34:12.26
evalが無い、はいそうですね。でおしまい。

>>86で挙げられたPythonの型チェックにしても実行前に検証は可能かと
問われればそれは無理。これもはいそうですね、でおしまい。

つうかパラダイムが違うんだから一方で存在する機能が他方で存在しない
ことなんて普通。

evalがどうしても必要な問題ならevalが存在する言語でプログラム書けば
良い。自分だけの小道具として使うならともかく、他人様の入力を受け
付けるシステムで気軽に使える場面がそう豊富だとは思わないが。
69 :デフォルトの名無しさん2011/06/22(水) 18:27:41.70
class MyHashMap<K,V> extends HashMap<K,V>
{
    public V get(K key, V value) {
        if (get(key) != null) {
            return get(key);
        } else {
            put(key, value);
            return value;
        }
    }
}

みたいなクラスを用意しとけば2行になったよ

MyHashMap<String,MyHashMap<String,List<String>>> hash = new MyHashMap<String,MyHashMap<String,List<String>>>();
hash.get(k1, new MyHashMap<String,List<String>>()).get(k2, new ArrayList<String>()).add(v);

総称型で V v = new V(); が出来れば
hash.get(k1).get(k2).add(v);
って書けるようになるんだけど
70 :デフォルトの名無しさん2011/06/22(水) 18:34:46.80
>>69 のコードは必要ない場合までnewしてていくらなんでもNGだろう。

静的型チェックを維持したままやるなら、
ruby のコードみたいに、デフォルトの値を設定するコールバックを用意するのがスジ。
72 :デフォルトの名無しさん2011/06/22(水) 18:39:22.01
>>70
もっと短くなるね。
73 :デフォルトの名無しさん2011/06/22(水) 18:41:46.83
>>72
Javaだとコールバックの記述が無名クラスだから、どうしても冗長になるよな…
finalつけないと値を覚えてくれないとかも正直ぎこちない。
75 :デフォルトの名無しさん2011/06/22(水) 19:13:38.60
>>72 じゃないけど、
派生型がアリならこんなとこか
Scalaなら派生型ナシでもっと短く書けるし、静的言語ならどうという例には向いてないんじゃないかコレ

import java.util.*;

public class Test1 {
 abstract class MapBase<K,V> extends HashMap<K,V> {
  abstract V make();
  V prepare(K k){
   V v = get(k);
   if( v== null ) put(k,v = make());
   return v;
  }
 }
 class M extends MapBase<String,List<String>>{
  @Override List<String> make() { return new ArrayList<String>(); }
 }
 class MM extends MapBase<String,M>{
  @Override M make() { return new M(); }
 }
 void foo(){
  new MM().prepare("a").prepare("b").add("111");
 }
}
81 :デフォルトの名無しさん2011/06/22(水) 20:57:59.16
>>75
M と MM が最高にダサイ
87 :デフォルトの名無しさん2011/06/23(木) 00:04:51.46
>>78は>>69と違って必要無いときは
getOrElseUpdate()の引数のMap()やBuffer()は実行されないんだよね?
Scalaいいね
71 :デフォルトの名無しさん2011/06/22(水) 18:38:13.63
てーかScalaの例がみたい。
implicit def でvivification対応のメソッドも後付できるし、
デフォルトの値を設定するコールバックを指定/記述する部分も簡潔にいけそう
78 :デフォルトの名無しさん2011/06/22(水) 19:38:08.19
scalaでなんも考えずにやるとこんな感じか

import scala.collection.mutable.{Map, Buffer}
val hash = Map[String,Map[String, Buffer[Int]]]()
hash.getOrElseUpdate("a", Map()).getOrElseUpdate("b", Buffer()) += 111
80 :デフォルトの名無しさん2011/06/22(水) 20:36:56.95
元ネタは2タプルがキーの辞書みたいだね、そっちでいいならそっちのが簡単だ

import scala.collection.mutable.{Map, Buffer}
val hash = Map[(String,String), Buffer[Int]]()
hash.getOrElseUpdate(("a","c"), Buffer()) += 111
83 :デフォルトの名無しさん2011/06/22(水) 23:13:18.56
Javaはコードを書くと同時に
テストコードを書いてると思えばいい。
あの長さにはテストコードが含まれてる。

動的言語で同等のテストコードを書いてみ。
Javaと同じで型チェック程度でいいからさ。

そうすると、動的言語も静的言語も
違いはなくなる。
85 :デフォルトの名無しさん2011/06/22(水) 23:47:58.07
>>83
意味不明というかただの妄想に聞こえる
89 :デフォルトの名無しさん2011/06/23(木) 03:38:58.34
>>85
意味不明じゃないよ。

型をしっかり書くということは
エラーチェックになっている。
それらの型以外が入らないわけだから。

動的言語でそれをやったところで、実行時にしかわからないわけだから
片手落ちにしかならないが、それでも型チェックを
加えてみって話。
91 :デフォルトの名無しさん2011/06/23(木) 05:03:11.30
Slacaの例とJavaの例を比較して、Javaの例が有利なポイントはゼロ。
なので >>89 の論旨はおかしい
90 :デフォルトの名無しさん2011/06/23(木) 05:01:20.63
むしろ「あれだけの長さのコードを書いて型チェックしかできない」のが問題なんだろう
93 :デフォルトの名無しさん2011/06/23(木) 05:54:09.50
短い例では動的言語が短くかけるけど、
通常のアプリのような
それなりの規模のものは、
動的言語で書いても全然短くならないんだよな。
なんでだろ?
95 :デフォルトの名無しさん2011/06/23(木) 06:11:23.29
>>93
そりゃ君が動的言語に向いた設計をできてないからだろ
97 :デフォルトの名無しさん2011/06/23(木) 06:16:00.48
反例がいくらでもあるが、
その前に「短いプログラム」じゃないのはどの程度の規模になるのか尋ねておこうか
98 :デフォルトの名無しさん2011/06/23(木) 06:30:11.52
動的言語が向いているのは
静的言語がIDE立ち上げてプロジェクト作るのに
かかる時間内に書ける程度までだろ
99 :デフォルトの名無しさん2011/06/23(木) 06:45:16.29
>>98
gmailのブラウザ側スクリプトすら書けなさそうだ、君には
100 :デフォルトの名無しさん2011/06/23(木) 06:52:34.91
ブラウザスクリプトも静的言語の方が向いているよ
今はJavaScriptしかのってないから仕方なく動的言語使っているってだけで
111 :デフォルトの名無しさん2011/06/23(木) 07:44:29.44
>>100
GoogleやTwitterはJavascript直接書いたりなんかしない。
静的ツールを使って自動生成しているよ。
101 :デフォルトの名無しさん2011/06/23(木) 06:54:18.04
「動的言語で書いても全然短くならない」と
「ブラウザスクリプトも静的言語の方が向いている」は全然別のことを言ってるんだが、分かってるのかな
103 :デフォルトの名無しさん2011/06/23(木) 06:55:58.04
>>101
全然別の話題を唐突に語りだしたのはおまえだよ、馬鹿
102 :デフォルトの名無しさん2011/06/23(木) 06:55:47.45
インタプリタなら動的言語の方が実装が簡単。
108 :デフォルトの名無しさん2011/06/23(木) 07:41:18.32
>>102
あれ現在最もインタープリタやコンパイラなどの言語処理を簡単にかけるのはMLとかの
静的言語だと思うけど。
109 :デフォルトの名無しさん2011/06/23(木) 07:42:37.83
>>108
コンパイラは静的言語の方が簡単。
106 :デフォルトの名無しさん2011/06/23(木) 07:40:05.65
え、動的言語使ってもJavaより短く書けないの?
どんだけ低能なんだよwww
ふつーのPGならJavaよりは圧倒的に短くなるよ?
107 :デフォルトの名無しさん2011/06/23(木) 07:40:56.52
てーか設計が静的言語と同じなら静的言語と同じ程度の構成にしかならんわな。
コーディングの問題じゃないよ。
112 :デフォルトの名無しさん2011/06/23(木) 07:48:45.34
大抵のコンパイラ/インタプリタは
C/C++を除けばその言語自身で書かれてることが多い
167 :デフォルトの名無しさん2011/06/23(木) 22:31:15.02
>>112
インタプリタで書かれたインタプリタか、胸熱じゃな。
113 :デフォルトの名無しさん2011/06/23(木) 07:50:14.79
動的言語が使えるのは一回きりの使い捨てスクリプトのみだな。

動的言語では人間が書かなければならないテストが膨大になってしまう。
静的言語ではケアレスミスはだいたい型チェッカがとってくれて、人間は
本当に大切なアプリケーションロジックを中心にテストできる。
これは重要だと思う。
114 :デフォルトの名無しさん2011/06/23(木) 07:56:40.84
このスレには動的言語でテスト書いてる人ってどのくらいいるんだろう
動的言語のテストってのはこういうもんだ!って
具体的な話になっているのをPart1から3までで見たことが無い
118 :デフォルトの名無しさん2011/06/23(木) 08:06:35.32
>>114
テストをちゃんとすると動的言語の方がより膨大なコード量になってしまうし、
拡張や変更のコストも大きくなってしまう。
テストをちゃんと考えるべきシステムは動的言語から静的言語へ移ってきてるよ。
117 :デフォルトの名無しさん2011/06/23(木) 08:04:59.93
LLVMを使った静的スクリプト言語がブラウザに載るとき、
デスクトップアプリとWebブラウザアプリの性能差がなくなる。
むしろJVMなんか使ったものより快適になるのでは
122 :デフォルトの名無しさん2011/06/23(木) 08:16:28.48
そもそも安全なソフトなんていらないの
クラッシュしたら修正して再起動すればいい
125 :デフォルトの名無しさん2011/06/23(木) 08:36:43.35
だからテストが要る
動的/静的型付け言語どちらであっても、真面目にテストを書いたら
コード全体の半分以上はテストになってしまう
実際グーグルのソースコードはそんな感じらしいが……
129 :デフォルトの名無しさん2011/06/23(木) 08:42:39.92
pythonってインターフェースを非公開にできたっけか?
130 :デフォルトの名無しさん2011/06/23(木) 08:43:48.48
>>129
_プレフィックス付きは非公開という暗黙の了解が
133 :1322011/06/23(木) 09:14:13.56
このテストって動的言語の利点ゼロだけど、お題があれだから……
134 :デフォルトの名無しさん2011/06/23(木) 09:35:19.54
テストが増えたら動的言語のいいところがなくなる。
VB6がクソミソに言われながらも、実用場面で広範囲にわたって使われたのも皮肉。
137 :デフォルトの名無しさん2011/06/23(木) 10:10:50.96
>>134
Variant型使いまくりのVB6で静的言語とかただのネタだろ。

静的言語なら常に型チェックを行うわけじゃないんだぜ
141 :デフォルトの名無しさん2011/06/23(木) 12:45:41.45
>>137
VB6でVariantはあまり使わない。外部のクラスを扱うときにObjectが多用されるぐらい。VB(COM)にinterfaceあるって失念してる人多いな。
135 :デフォルトの名無しさん2011/06/23(木) 09:58:29.78
C++

#include <map>
#include <string>
#include <vector>
int main() {
using namespace std;
map<string,map<string,vector<string> > > h;
h["a"]["b"].push_back("111");
}
139 :デフォルトの名無しさん2011/06/23(木) 10:15:53.17
>>135
じゃあ今度はJavaのようにAutovivificationしないバージョン書いてみて
138 :デフォルトの名無しさん2011/06/23(木) 10:12:00.22
で、静的言語の信者の人はSQLやJSONはどうやってるんですか

データと型が一致しないんじゃ「静的言語だから型チェックは大丈夫」とかただの念仏ですよね
142 :デフォルトの名無しさん2011/06/23(木) 13:11:59.34
JSONとか簡単じゃん

boost::property_tree::ptree pt;
read_json("hoge.json", pt);
cout << pt.get<string>("hoge") << endl;
143 :デフォルトの名無しさん2011/06/23(木) 13:33:26.82
>>142
データに対する何のチェックもないよねそれ
144 :デフォルトの名無しさん2011/06/23(木) 13:38:43.15
チェックしたければすればいいじゃん
145 :デフォルトの名無しさん2011/06/23(木) 15:07:32.27
>>144
スレタイ嫁
148 :デフォルトの名無しさん2011/06/23(木) 16:21:00.42
むしろブラウザに仮想マシンのっけて好きな言語で開発させれ
150 :デフォルトの名無しさん2011/06/23(木) 17:23:29.61
phpみたく、他の言語もインストールしたら、サーバ側でhtmlタグ埋め込みで記述出来るようにはして欲しいかな
151 :デフォルトの名無しさん2011/06/23(木) 17:40:32.57
ActionScript最強伝説
152 :デフォルトの名無しさん2011/06/23(木) 19:52:26.55
>>151
まあ・・・なんだ、あんたも大変だな
153 :デフォルトの名無しさん2011/06/23(木) 19:59:31.35
良い言語だけどね、AS3。良い感じでJavaScriptの進化形。
使える場面が限定されすぎるのが残念だ。
154 :デフォルトの名無しさん2011/06/23(木) 20:46:22.39
あれならJavaのほうがいい
マジで
157 :デフォルトの名無しさん2011/06/23(木) 21:52:28.02
>>154
Javaチックだけれどもクロージャが書きやすい点は良い > AS3

関数オブジェクトのシグネチャを検証しないのは物足りないし、ジェネリクス
欲しいし、変数が関数スコープとかウンコだけれども。
156 :デフォルトの名無しさん2011/06/23(木) 21:48:48.98
未だに型宣言しないで動的にも書けるんだけれども静的な書き方の恩恵が
でかすぎてAS3ですっかりJavaチックな書き方が浸透したと思う。
158 :デフォルトの名無しさん2011/06/23(木) 22:08:12.20
なんで短いコードなら動的言語は圧倒的に少ない行数でかけるのに、
普通のプロジェクトでは大差がないのか考えてみた。

1.動的言語は基本的な命令がライブラリをロードしないで使える。
printとかなにもロードしないで実行出来る。だけど実際のプロジェクトでは
他に多くのライブラリを使用するので差がなくなる。

2.動的言語は変数を宣言しないで使える。
だけど実際のプロジェクトではstrictとかwarningをONにするので結局変数宣言している

3.動的言語はクラスを書かなくて良い
だけどある程度大きくなると必然的にクラスを使わないと管理しづらい。
フレームワークを使うとほぼ必然的にクラスを使うことになる。

4.関数を作らない前提の比較だから
短いコードでは基本的に関数を作成しない。実際のプロジェクトでは関数を
作ることで大幅にコードの削減をしているが、短いコードの例ではその利点が生かせない。

こんな所かな?
他にもあったら教えてください。
172 :デフォルトの名無しさん2011/06/23(木) 22:37:29.35
>>158
何を持って動的としてるか解からんなぁ。
タダの動的型付け言語のことをいうとるんじゃろうか。
178 :デフォルトの名無しさん2011/06/24(金) 00:49:18.61
>>158
動的言語で短いコードを書くためには、実行時メタ機能などを
使いこなす必要があるが、土方レベルのPGには使いこなせず、
静的言語にもある機能だけでプログラム書くから

    だから、土方が動的言語を使っても短く書けない
181 :デフォルトの名無しさん2011/06/24(金) 01:20:52.76
>>178
じゃあ、責任持って
実行時メタ情報とやらを使うのと
使わないのとでどれくらい差があるかを
例示してね。できなきゃ笑おう。みんなでw
182 :デフォルトの名無しさん2011/06/24(金) 01:28:07.80
>>181

まずは>>158が
> なんで短いコードなら動的言語は圧倒的に少ない行数でかけるのに、
> 普通のプロジェクトでは大差がないのか考えてみた。

と言っているので、大差ないという例をコード付きで示してもらおう。
そして、そのウンココードを見て笑おう。

そのあとなら、そのウンココードを短くしてあげても良いよwww
183 :uy2011/06/24(金) 01:28:28.99
>>158
何が「こんなところかな?(キリッ)」 なわけ

>普通のプロジェクトは大差ないって、
はぁあ? どこのプロジェクトを比較してんの???

>変数宣言に関しては
静的言語だろうとハッシュ利用すれば宣言なしで使えるし
動的言語でも、変数宣言は行うから。 いきなりコードの途中から変数つくって使ったら
可読性下げるに決まってんだろ、 だから土方には仕えないって言ってるんだよ

>クラスをかかなくていい?
は? wwwwwwww 動的静的かんけいねえよwwwwwwwバカなの??Wwwww
アルゴリズムレベルでもの考えろよwwwwwwww

>関数
は??? 関数を作ることでコード削減って意味不明
関数も含めてソースコードだろうがwwwwwww
つうか何?? オブジェクト指向限定でもの言ってんの????wwwwwwwww
まずそこからして以下略


よく考えてから書き込みしてくれ・・・・・・・・・・・・・・・・・・・・・・
184 :uy2011/06/24(金) 01:29:27.37
>>182
気持ち悪い 氏ね
189 :デフォルトの名無しさん2011/06/24(金) 01:53:33.10
192 :デフォルトの名無しさん2011/06/24(金) 02:10:54.94
>>189
それそれ。
結局ある程度の規模になると、
どうしてもそういう風になっちゃうよね。

あまり短くなったと思えない。
193 :デフォルトの名無しさん2011/06/24(金) 02:14:02.88
てーか>>158は本質を分かってないんじゃないか
動的言語だって関数もクラスも書くけど、問題はそこじゃなくて「どう書くか」なんだよ

たとえば「あるモジュールのあらゆるメソッドの呼び出しの前後に処理を挟みたい」とか
静的言語だと悪夢だけど動的言語だとそうでもない。

たとえば「コールバック引数を受けとるeachメソッドを使うようにしたら、呼び出し側の記述量が逆に増えた」とか
言語によっては全然増えない。

そういう「動的言語なら簡単に書ける」設計をしないんなら、そりゃ静的言語と大差ない記述量になるだろう。
197 :デフォルトの名無しさん2011/06/24(金) 02:29:47.65
>>182
これと同等のコードを静的言語で何行でかける?
まぁ、Boost使えば1行で済んだりはするけど。
function Example( object )
{
     object.ExampleHoldMethod = object.Method;
     object.Method = function( arg )
     {
           object.ExampleHoldMethod("preset",arg);
     }
     with({ result:othreObject.Method( object ) })
     {
            object.Method = object.ExampleHoldMethod;
            return result;
     }
}
198 :デフォルトの名無しさん2011/06/24(金) 02:47:47.20
>>182
やっぱ本質を分かってないよ。

それと同じことをするコードを0から作ったら
行数は増えるよ。

だけど、現実にはそんなことをするための
ライブラリを使うことで、わずかの行で済む。


まさにこう言うことじゃないか。
> 4.関数を作らない前提の比較だから
> 短いコードでは基本的に関数を作成しない。実際のプロジェクトでは関数を
> 作ることで大幅にコードの削減をしているが、短いコードの例ではその利点が生かせない。
163 :デフォルトの名無しさん2011/06/23(木) 22:18:41.48
C++でクロージャかけないんだが?
かけるのは関数オブジェクト。

クロージャというのなら、クロージャを定義した場所(関数)の
ローカル変数が見える必要がある。
165 :デフォルトの名無しさん2011/06/23(木) 22:25:06.03
>>163
ローカルクラスは、staticなローカル変数にアクセスできる。
普通使わんけどな。
164 :零細 ◆REISAIxhXo 2011/06/23(木) 22:20:31.22
このスレは、大都会が占拠したけぇの、
これからこのスレに書き込んだヤツは漏れ無く
大都会都民じゃけぇの。
169 :デフォルトの名無しさん2011/06/23(木) 22:32:54.64
class can_divide {
int n_;
public:
can_divide(int n) : n_(n) {}
bool operator()(int x) const { return x % n_ == 0; }
};
173 :デフォルトの名無しさん2011/06/23(木) 22:50:25.52
>>169
int function()
{
static int n;
struct _:interface<int>
{
bool operator()(int x) { return x % n_ == 0; }
} closeure;
algorithm(static_cast<interface<int>&>(closeure));
}
170 :デフォルトの名無しさん2011/06/23(木) 22:36:23.66
クロージャーって
メソッドを二つ持っているオブジェクトを
代入したいようなときってどうするの?
171 :デフォルトの名無しさん2011/06/23(木) 22:37:23.88
>>170
どういうことだ
177 :uy ◆yyC0rYWEq2 2011/06/23(木) 23:56:18.92
高級なローカル変数
>>234
185 :デフォルトの名無しさん2011/06/24(金) 01:37:29.49
つーか短く書けるってのは言語の評価軸のひとつにすぎない
短く書けても他にデメリットがあるなら全体としての評価は下がる
187 :デフォルトの名無しさん2011/06/24(金) 01:44:15.11
単純なコードでなければ、ライブラリの有無で決まるんじゃないの。
188 :デフォルトの名無しさん2011/06/24(金) 01:51:41.65
動的言語はPython3やRuby1.9程度の小変更で
移行に苦労しているからな
大規模プロジェクトに使うなんてとても無理
190 :デフォルトの名無しさん2011/06/24(金) 01:55:46.41
>>188
Ruby1.9やPython3レベルの"後方互換性の無い"変更が
Javaで起こったら暴動が起きるレベル
194 :デフォルトの名無しさん2011/06/24(金) 02:19:29.03
> 静的言語だと悪夢だけど動的言語だとそうでもない。

静的言語でもそうでもない。

たとえばJavaならAspectJを使えばいい。
また実務なら何らかのフレームワークを使うわけで、
そのフレームワークにフィルタやフックなどの名前で同じことができる。
springフレームワークにもAOPの機能がある。

そう、ここに書き込める程度の小さい例なら言語に搭載している分
短くかけるが、実務なら言語に搭載してなくても、ライブラリによって補完
するわけで大差がなくなるわけさ。
195 :デフォルトの名無しさん2011/06/24(金) 02:23:01.21
「動的言語なら簡単に書ける」設計が
メソッドの前後に処理を入れていくことで
創り上げる設計なのか?
196 :デフォルトの名無しさん2011/06/24(金) 02:25:53.65
オブジェクト指向設計や
構造化設計なら聞いたことあるが
動的言語設計なんてのは聞いたこと無いな?

どうせ動的言語でも設計はオブジェクト指向とかなんだろ?
199 :デフォルトの名無しさん2011/06/24(金) 02:54:33.62
全然意味の無いプログラムでいいなら
以前Pythonスレで見たこれを静的言語で書いてみてほしい
興味本位なんで言語の優劣とは関係なしで

def nesteddict():
  return defaultdict(nesteddict)

d = nesteddict()
d[0][1][2][3][4] = 5
201 :デフォルトの名無しさん2011/06/24(金) 03:02:15.52
>>199
defaultdictという関数の実装を教えてくれ。
206 :デフォルトの名無しさん2011/06/24(金) 03:12:30.48
>>201
defaultdictは辞書(ハッシュマップ)のコンストラクタで、
Autovivificationするときに引数にとったクロージャを
オブジェクトの生成関数として使う
214 :デフォルトの名無しさん2011/06/24(金) 04:11:16.46
>>204
default_factoryはdefaultdict()を呼び出す側が用意するもの(>>199 では nesteddict を渡している)だから
インタフェースや宣言はしても、実装はしちゃダメよ
221 :デフォルトの名無しさん2011/06/24(金) 08:14:06.67
>>206
そういうdefaultdictが用意されているという前提で、
それを利用するコードを書けばいいのか?

Javaならクロージャの代わりに無名クラスに
するだけの話だと思うが・・・
228 :デフォルトの名無しさん2011/06/24(金) 10:49:24.12
>>221

>>199 の nesteddict は常に同じ型のオブジェクトを返してるから
面白くない
てわけで、こっちはどう?
defaultdictに相当する関数は型宣言だけで中身は書かなくて良いよ

def nesteddict(n):
    def f(m=n):
        return nesteddict(m-1)
    return defaultdict(f) if n > 0 else defaultdict(list)

d = nesteddict(5)
d[0][1][2][3][4][5].append('a')
200 :デフォルトの名無しさん2011/06/24(金) 02:59:17.74
動的言語では、関数を置き換えるのが仕事ですw

今日もバグってる関数が見つかったら。
今すぐ入れ替えます!と答えてる。
202 :デフォルトの名無しさん2011/06/24(金) 03:02:23.14
そろそろ動的言語原理主義者みたいなの現れないの?
動的言語で作られたソフト以外は拒否するみたいな
203 :デフォルトの名無しさん2011/06/24(金) 03:09:02.11
なんでオブジェクトありきでしか動的言語を語れないんだ?

let prefix = "Text";
let function = prefix & "Output";
function("text");

こういうメタシステムでも動的だろもっと視野を広げろよ。
205 :デフォルトの名無しさん2011/06/24(金) 03:11:29.53
>>203
それ、VBのCallByNameみたいなもんか?
204 :デフォルトの名無しさん2011/06/24(金) 03:09:27.23
本物の実装じゃないみたいだけどこんな感じか?
Pythonしらんから良く解らんが、これをJavaで書けばいいのか?
今度はdefault_factoryの実装が必要になりそうだが。
http://d.hatena.ne.jp/odz/20071216/1197817317

class defaultdict(dict):
  def __init__(self, default_factory = None, *args, **kwargs):
   dict.__init__(self, *args, **kwargs)
   self.default_factory = default_factory

  def __missing__(self, k):
   if self.default_factory is not None:
    self[k] = self.default_factory()
    return self[k]
   else:
    raise KeyError(k)

まあ、結局はコードが短く書けるかどうかってのは、
そういうクラスが用意されているかの問題でしかない。
207 :uy ◆yyC0rYWEq2 2011/06/24(金) 03:29:59.79

しつもんです

JAVA(笑)でこれかくとどうなるんですか

require"ostruct"


v = OpenStruct.new ({ :x => 11 , :y => 22 })

p v.x
p v.y
p v.n = 99

209 :uy ◆yyC0rYWEq2 2011/06/24(金) 03:37:22.64

しつもんです

C++(笑)でこれかくとどうなるんですか


("a".."f").each do | m |
  if "b"==m.."d"==m
    p m
  end
end
210 :uy ◆yyC0rYWEq2 2011/06/24(金) 03:57:25.23

しつもんです

これを静的言語でかくとどうなるんですか?


a = ":"
b = "\\(.*?\\)"
"209 :uy ◆yyC0rYWEq2 :2011/06/24(金) 03:37:22.64 " =~ /#{a}(.*)#{b}/

$1.split(//).take(20).each_slice(3)
.each_with_index.each_with_index.each_with_index.each_with_index.each_with_index.each_with_index.each_with_index.each_with_index.each_with_index
.each_with_index.each_with_index.each_with_index.each_with_index.each_with_index.each_with_index.each_with_index.each_with_index.each_with_index
.each_with_index.each_with_index.each_with_index.each_with_index.each_with_index
.each_with_index do | ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( a , z ) , y ) , x ) , w ) , v ) , u ) , t ) , s ) , r ) , q ) , p ) , o ) , n ) , m ) , l ) , k ) , j ) , i ) , h ) , g ) , f ) , e ) , d ) , c ) , b ) |
  print a , b , c , d , e , f , g , h , i , j , k , l , m , n , o , p , q , r , s , t , u , v , w , x , y , z
  puts
end

231 :デフォルトの名無しさん2011/06/24(金) 11:08:09.24
>>210を性的なF#で書いてみた
http://ideone.com/FBs8v
同じサイトで元のRubyコード実行してみたけど、ソースに日本語が含まれてるせいか
うまく動かなかったんで、実行結果の比較検証はしてない
234 :デフォルトの名無しさん2011/06/24(金) 12:39:54.75
>>226>>231
エロい人、乙であります
211 :uy ◆yyC0rYWEq2 2011/06/24(金) 03:58:24.73
しつもんです  これをゴミ・・・いや静的(笑)言語でかくとどうなるんですか?
kiu =[
[ "K_SPACE" ] ,
[ "K_COMMA" ] ,
[ "K_PERIOD" ] ,
[ "K_SLASH" ] ,
[ "K_YEN" ] ,
[ "K_COLON" ] ,
[ "K_SEMICOLON" ] ,
[ "K_BACKSLASH" ] ,
[ "K_LBRACKET" ] ,
[ "K_RBRACKET" ] ,
[ "K_MINUS" ] ,
[ "K_AT" ] ,
[ "K_PREVTRACK" ] ,
]
kiu2 = [" " ,"," ,"." ,"/" ,"\\" ,":" ,";" ,"_" ,"[" ,"]" ,"-" ,"@" ,"^" ,]
kiu3 = [ " " ,"<" ,">" ,"?" ,"|" ,"*" ,"+" ,"_" ,"{" ,"}" ,"=" ,"`" ,"~" , ]
aru = ("a".."z").to_a
suu = ("K_0".."K_9").to_a.rotate
suu2= ("0".."9").to_a.rotate
suu3= (" \! \" \# \$ \% \& \' \( \) 0").split
nnn = aru.to_a.size + suu.to_a.size + kiu.size

p keytable= [ ( ["K_"]*aru.size ).zip( aru.map(&:upcase).to_a ).map(&:join) , suu , kiu ].map(&:to_a).flatten
.zip( [:default]*nnn ).zip( [aru , suu2 , kiu2 ].map(&:to_a).flatten )
.zip( [:shift]*nnn )
.zip( [aru.map(&:upcase) , suu3 , kiu3 ].map(&:to_a).flatten )
.zip( [:control]*nnn ).zip( [""]*nnn ) # .zip( [":command"]*nnn ).zip( ["<command>"]*nnn )
.flatten
222 :デフォルトの名無しさん2011/06/24(金) 08:32:50.42
>>211
こんなオナニーコードじゃなくて金になりそうな例でお願いします
226 :デフォルトの名無しさん2011/06/24(金) 10:26:34.37
>>211を静的()言語のF#でやってみた
http://ideone.com/vXzC8
212 :デフォルトの名無しさん2011/06/24(金) 04:10:03.14
ていうか極限はこうだろ

「eval("code...") をJavaで書いて下さい」
215 :uy ◆yyC0rYWEq2 2011/06/24(金) 04:22:42.93
>>212
みんなわかっているよ
ハンデは与えてやれよ・・・・・・・
頑張ればまだ静的言語でかけるかもしれないコードをおれはのせたよ
静的言語でやったら冗長するんだろうけどねwwwwwwwww
216 :デフォルトの名無しさん2011/06/24(金) 04:28:25.64
>>215
ローカル変数へのアクセスがなくてもいいんならDynamicJavaとか(保守されてないけど)
既存のコードもあるんだけどね。
213 :デフォルトの名無しさん2011/06/24(金) 04:10:44.06
あ、もちろんローカル変数にアクセスできないとダメですよ?
217 :uy ◆yyC0rYWEq2 2011/06/24(金) 04:57:29.50
ローカル変数にアクセス出来ないのは、いずれ改善されるとは思ってる
eval以外のクロージャにしてもlambdaにしても、ローカル変数にアクセス出来ないなんて
利用価値がないし
218 :デフォルトの名無しさん2011/06/24(金) 05:20:29.35
1.7ですらクロージャまわりは残念な状況だし、どうなるかな
220 :デフォルトの名無しさん2011/06/24(金) 07:07:21.85
あ、もちろんローカル変数にアクセスできないとダメですよ?
224 :デフォルトの名無しさん2011/06/24(金) 09:28:37.88
一行ってだけで、効率悪い。
一行が必須なら、それに当たるメソッドつくれば、たいていの言語で、同じコードが動く。
もっと、らしいのを出してこい。
227 :デフォルトの名無しさん2011/06/24(金) 10:48:44.07
eval野放図に使って安全はないだろ。カプセル化したら意味ないし。
229 :デフォルトの名無しさん2011/06/24(金) 10:56:12.07
スレタイも読めない動的言語(笑)

安全なソフトを作ることに自信がないからって、ちっちゃなトイプログラムが
簡潔に書けることをアピールしだすwww

うゆさんの投下するプログラムって、簡潔なのにすごく「安全なソフトウェア」ですね^^^^^
235 :デフォルトの名無しさん2011/06/24(金) 13:17:16.77
玩具のような簡単なテストコードは、ユーザーが自分の安全を自分で確認しやすい
難解な手法は「俺が検証しなくても誰かがするだろう」というパターンに陥りやすい
236 :デフォルトの名無しさん2011/06/24(金) 14:04:04.66
なんかRubyのRangeやイテレータの類が便利に使える事例と言うだけで
静的動的は関係ない例ばかりだなぁ。
237 :デフォルトの名無しさん2011/06/24(金) 14:18:33.35
静的型と関係なく使える道具が増えたら、
動的言語で安全なソフトが作れる可能性が大きくなるな。
239 :デフォルトの名無しさん2011/06/24(金) 14:51:15.04
そういう水掛け論よりはコードで示したほうが建設的だろうに
自慢のIDEでちゃちゃっと書いてくださいよ
え?もしかしてトイプログラムも書けないの?
240 :デフォルトの名無しさん2011/06/24(金) 14:53:07.14
あんなネタどうでもいいから、 eval(文字列) を書いて下さいよ。
もちろんevalの手前にあるローカル変数にもアクセス出来る奴。

でなきゃ「動的言語と利便性はたいして変わらない」なんて言えないでしょ?
254 :デフォルトの名無しさん2011/06/24(金) 16:28:50.93
>>252
うん。だから>>240についても答えは、

「eval無いよ。でも無くても動的言語と利便性はたいして変わらない。
 だってeval使わなきゃならない場面なんて良くある例じゃないし」

になるんだよな。
241 :デフォルトの名無しさん2011/06/24(金) 15:08:39.52
その前にevalがあると利便性を感じるような現実的な例を挙げてくれ。
242 :デフォルトの名無しさん2011/06/24(金) 15:10:47.41
>>241
データ中にコードを埋め込めるので、データ側で何でも書けるようになる。
244 :デフォルトの名無しさん2011/06/24(金) 15:14:56.08
evalで安全なソフト
246 :デフォルトの名無しさん2011/06/24(金) 15:18:14.65
>>244
そりゃサンドボックスの話になるな。べつに不可能事じゃない。
247 :デフォルトの名無しさん2011/06/24(金) 15:27:57.94
eval自体がどうっていうより、パーサとインタプリタを内蔵することで機能拡張を可能にするアプリならいくらでもある。
emacs ,、GIMP, ブラウザ, 等がそうだな。
アプリの上で動くスクリプトを書くんじゃなくて、そういうアプリを作るにはパーサとインタプリタを含むエンジンを内蔵するしかない。

もう一つのパターンは、単に「簡単なリフレクション」として用いられる。
リフレクションが必要だと思われるあらゆる例で、リフレクションよりも簡潔に書くことができる。
249 :デフォルトの名無しさん2011/06/24(金) 15:42:17.26
>他人様の入力を受け付けるシステムで気軽に使える場面がそう豊富だとは思わないが。

インタプリタを内蔵してるアプリなんて別に珍しくないんだが。
それらは安全性のために色々仕掛けを施してはいるが、
結局やってることはevalと変わらない。

で、たとえばサーバ用途でならevalで十分なシチュエーションは普通に存在する。
動的言語で使われるテンプレートシステムのいくつかは実際にevalに依存してるしな。
利便性があるというのがtrueなのは間違いない。

静的言語で同じことをやろうとすると大がかりなインタプリタが必要になる上に、
コールスタック上のローカル変数にアクセスする手段が提供されないので
実装が余計に面倒になる。
別に不可能事はなにもないのだが、煩雑なばかりで何も嬉しくない。
250 :デフォルトの名無しさん2011/06/24(金) 16:15:10.46
>>249
>利便性があるというのがtrueなのは間違いない

特定の用途に関して利便性があるのは否定しないよ。

ただ「気軽に使える場面がそう豊富だとは思わない」と書いたように、通常
のプログラミングの中でどれだけ使える場面があるのかということ。
毎日テンプレートエンジン書いたりインタプリタの組み込みをしている人間
がどれだけいる? それは結構、特殊だよ。

そもそもevalを気軽に使える場面が豊富なプログラミング言語なんて嫌だw
そういう場面ではevalではなく通常の構文の範疇で同じ事を簡単にかける
ように言語は設計されているべき。
251 :デフォルトの名無しさん2011/06/24(金) 16:17:31.43
>>249
ちなみに静的言語で同じ事をするのにスクリプト機能であればインタプリタ
の実装を拾ってきて組み込むし、テンプレートエンジンであればパーサーを
書くでしょう。実際どちらも便利なツールやライブラリの類が存在するので
そう難しい話ではない。

evalで実行環境のインタプリタを流用するのは簡単だけれども、入力を検証
しないと危ないし、テンプレートエンジンにしても受領できる構文がホスト
言語の構文にどこかしら縛られる。
252 :デフォルトの名無しさん2011/06/24(金) 16:18:26.69
>>250
そもそもよくある例だから挙げられてるんじゃないよなコレ

動的言語らしい機能の端的な面として出てきてるだけで。
253 :デフォルトの名無しさん2011/06/24(金) 16:25:38.74
動的型付けだからeval乱舞って、そんなわきゃない
極端すぎる
255 :デフォルトの名無しさん2011/06/24(金) 16:30:57.22
じゃあ利便性が劣ってることは認めるんだな。

evalだけならともかく、実際には動的言語らしい機能って他にも一杯あるしな。
276 :デフォルトの名無しさん2011/06/24(金) 17:23:18.97
>>255
うん。evalについてはね。直接対応する機能が無いのだから当然。
ただ劣るにしても程度問題で、普段滅多に使う場面がないなら劣るに
しても微々たるもの。

>evalだけならともかく、実際には動的言語らしい機能って他にも一杯あるしな。

それも個別に検証しないとね、
257 :デフォルトの名無しさん2011/06/24(金) 16:44:07.76
それは脳内理論にすぎない
現実の大規模システムで使われているのは静的言語
267 :デフォルトの名無しさん2011/06/24(金) 17:01:16.71
259 :デフォルトの名無しさん2011/06/24(金) 16:48:05.60
twitterみたく動的言語で作っても規模が大きくなったら
静的言語で書き直さなきゃらならい羽目になるんだったら
最初から静的言語で書いた方がいいよな
260 :デフォルトの名無しさん2011/06/24(金) 16:49:39.21
早すぎる最適化という言葉をまだ知らない奴がいるのか
263 :デフォルトの名無しさん2011/06/24(金) 16:53:48.33
>>260
おまえが知っているのは言葉だけで中身知らないだろw
261 :デフォルトの名無しさん2011/06/24(金) 16:50:39.68
動的言語のほんのちょっとテストが書きやすいなんてのは
型チェックがなくて余分にテストを書かないといけない分であっという間にマイナスだろ
264 :デフォルトの名無しさん2011/06/24(金) 16:54:54.84
>>261
それって動的言語はテストを書くけど
静的言語は全然テスト書かない場合の比較ですよね?
265 :デフォルトの名無しさん2011/06/24(金) 16:56:57.96
>>264
そんなわけない
動的言語には大規模プロジェクトそのものがないから比較不可能だけど
266 :デフォルトの名無しさん2011/06/24(金) 16:58:22.59
>>265
じゃあテスト書いてみてよ
269 :デフォルトの名無しさん2011/06/24(金) 17:04:44.70
>>261
実際問題、動的言語だと型チェックよりも欲しい型への変換のが多くね?
結果的に「型変換出来ない=例外吐くになる」ってのが多いわ
例えば「引数として型Aを要求する関数」よりも「引数を『型Aを表す何か』として解釈し、そのように振る舞う関数」を書く
結果的に、型Aへの変換が出来ない引数は淘汰される感じ
262 :デフォルトの名無しさん2011/06/24(金) 16:50:48.56
twitterみたいな動かしてみるまで人気出るか分からんサービスでもか?
268 :デフォルトの名無しさん2011/06/24(金) 17:03:44.24
動的厨に言う大規模って
Webサイトのアクセス数って意味?
270 :デフォルトの名無しさん2011/06/24(金) 17:04:57.82
274 :デフォルトの名無しさん2011/06/24(金) 17:20:04.24
>>270 から何をどう発展させろってんだよwww

強いて言えば、スクリプトってのはむしろ静的言語にエンジン組み込んで動かすものだよね
JavaScriptもサーバで使うようになってきたし。JITも入ってるから静的言語だな
271 :デフォルトの名無しさん2011/06/24(金) 17:12:42.32
動的言語って静的言語のライブラリをラップしたライブラリ使わないと
使い物にならないよね
272 :デフォルトの名無しさん2011/06/24(金) 17:14:51.41
>>271
その言語を使ってどんだけのコードを書くかの問題じゃないか?
そもそもライブラリの安全性とそれを呼び出すコードの安全性ってそれぞれ違うし、
スレタイに関係ない話だと思う
273 :デフォルトの名無しさん2011/06/24(金) 17:16:26.83
動的厨は自分ではさんざんスレタイと関係ないこと話すのに
ちょっとでも不利なことになるとすぐこれだw
275 :デフォルトの名無しさん2011/06/24(金) 17:20:33.04
だって全然デメリットじゃないじゃんそれ

このスレは、静的/動的両方の言語を安全に使えるPGと、
静的言語(典型的にはJava)しか使えないPGが
意見を戦わせてるんだよ?
277 :デフォルトの名無しさん2011/06/24(金) 17:28:12.76
動的言語の大規模ソフト例を聞くと
アクセス数の多いサイトを出してくる
動的言語しかつかえないPGと、
静的言語で安全な大規模ソフト作っているPGが
意見を戦わせるスレだろ
279 :デフォルトの名無しさん2011/06/24(金) 17:31:56.90
>>277
安全なソフトを日々作ってるプログラマなら
テストは書き慣れてるよね?書いてみてよ
280 :デフォルトの名無しさん2011/06/24(金) 17:32:34.04
どっちにしろ、事例だけで確定するんならこのスレいらん

「Amazon uses Perl in a variety of ways through their enterprise. They have a custom application framework called Gurupa which is a bridge between a service layer and Mason.」
でスレタイに反例が存在してることになるので終了ということになる。
282 :デフォルトの名無しさん2011/06/24(金) 17:49:48.73
Pythonによって実装されているフリー/オープンソースソフトウェアなんて大げさに書かれているけど
ちょこっと拡張用に組み込まれた程度のものが混じっているのな
284 :デフォルトの名無しさん2011/06/24(金) 17:53:18.93
動的厨の言う大規模ソフトって
アクセス数が多いとか商品数が多いWebサイトなのな
288 :デフォルトの名無しさん2011/06/24(金) 17:56:46.08
>>284
静的厨のいう大規模ソフトってのは
土方を大量に集めて開発したって意味だよね
290 :デフォルトの名無しさん2011/06/24(金) 17:57:44.07
>>289
>>288
285 :デフォルトの名無しさん2011/06/24(金) 17:55:40.35
今時、大規模なシステムを1個の複雑なソフトで作ることの方が稀だな

Google uses Python for many tasks including the backends of web apps such as Google Groups, Gmail, and Google Maps, as well as for some of its search-engine internals
googleが安全かどうかは意見が分かれるところだが。

NASA is using Python to implement a CAD/CAE/PDM repository and model management, integration, and transformation system which will be the core infrastructure for its next-generation collaborative engineering environment
NASAが安全かど(ry

the organizations that use Python.
http://wiki.python.org/moin/OrganizationsUsingPython
Financial の分野でも普通に使われてる
287 :デフォルトの名無しさん2011/06/24(金) 17:56:39.02
Pythonがアプリに組み込まれるのは
動的言語の方が実装しやすいとか
馬鹿でも使えるとかそんな理由だろ
291 :デフォルトの名無しさん2011/06/24(金) 17:58:20.37
>>287
馬鹿でも使えるって意味ではJava最強
これは褒めてる
289 :デフォルトの名無しさん2011/06/24(金) 17:57:15.43
大規模っていうからには、年間開発費が10億円以上だろ
292 :デフォルトの名無しさん2011/06/24(金) 17:59:02.41
馬鹿に書かせても馬鹿なコードを書かれない、ってむしろ静的厨の主張する静的言語の特長だったよねw
293 :デフォルトの名無しさん2011/06/24(金) 17:59:10.58
今時、大規模なシステムを1個の複雑なソフトで作ることの方が稀だな
294 :デフォルトの名無しさん2011/06/24(金) 17:59:42.75
アプリの拡張には馬鹿でも使えるってのは重要
Heskellスクリプトなんて入れたらユーザーは怒るだろ
295 :デフォルトの名無しさん2011/06/24(金) 18:02:59.93
静的厨のいう「大規模なソフト」自体が問題分割に失敗した悪い例だな。

まともな設計者なら問題を適切に分解して、大規模じゃないソフトの集合にしてしまうだろうし、
そうなると言語の選択ポイントは「(馬鹿に書かせても)安全かどうか」ではなくなってしまう。
どうせテストはするんだしな。

スレタイの反例も十分出したし、このスレもういらね
300 :デフォルトの名無しさん2011/06/24(金) 18:12:29.92
>>295
まあWindows界を筆頭に、1つのソフトに何でも詰め込む設計が跋扈してるからなあ
296 :デフォルトの名無しさん2011/06/24(金) 18:06:18.87
動的厨の言う大規模は
アクセス数やページ数が多いWebサイトだからな
しかもバックエンドに静的言語で作られたソフトを使った
298 :デフォルトの名無しさん2011/06/24(金) 18:10:18.27
データベースが動的言語で出来てると思ってる?
301 :デフォルトの名無しさん2011/06/24(金) 18:13:46.93
>>298
中身が何であろうと、SQLを扱う上では動的コードの視点に立たないと穴ぼこだらけになっぞ?
299 :デフォルトの名無しさん2011/06/24(金) 18:10:46.38
で、「(馬鹿に書かせても)安全だから」って理由で静的言語で書かれた大規模なソフトって何だよ?
305 :デフォルトの名無しさん2011/06/24(金) 18:34:38.06
SQLが動的言語って、どういう意味で動的って言っているの?
306 :デフォルトの名無しさん2011/06/24(金) 18:37:23.98
動的SQLの意味に決まってるだろう
JDBCで使ったことあるんじゃない?
307 :デフォルトの名無しさん2011/06/24(金) 18:49:02.09
動的SQL(Dynamic SQL)と動的言語は違うだろう。
SQLに対する理解が足りないのか動的言語に関する理解が足りない
のかはっきりしてくれ。

ぶっちゃげ呼び出し側から見れば動的SQLは普通のクエリ実行よりも
よっぽど静的だ。
315 :デフォルトの名無しさん2011/06/24(金) 20:57:35.17
>>307
要するに静的だろうとテストはしっかりやらなきゃダメってことだろ
309 :デフォルトの名無しさん2011/06/24(金) 19:04:52.51
動的言語は実行時にしか型エラーがみつからないから
ダメだっていってるひとがいた
311 :デフォルトの名無しさん2011/06/24(金) 19:16:21.84
テストを書けば動的も静的も関係ないって話はC0でも良いからカバレッジ何パーセントくらいで言えるんだろう。
また、ホビー、金融系、Webの緩いのや硬いのでも現実的にテストにさける時間は変わってくるよね。
テストで担保するって話が土台になるならここの前提はとても重要だと思う。
314 :デフォルトの名無しさん2011/06/24(金) 20:41:50.14
>>311
実験に時間をさく事は現実的ではなくて
しかも「時間のかからない安全策」が現実的だと言いたいのか?
そんな都合の良い現実がどこにあるんだ
317 :デフォルトの名無しさん2011/06/24(金) 21:25:02.06
動的か静的かはさておいて、データ構造やアルゴリズムの基礎も知らん人に
プログラミングできる環境を提供して欲しくないな。
素人の作ったソースのメンテやらされて大迷惑だよ。
本当に抽象的・数学的思考のできない奴に、コード書かせるなよ。
318 :デフォルトの名無しさん2011/06/24(金) 21:33:29.37
うちでは使えない奴は本番では使われないダミーコード書かせてる
319 :デフォルトの名無しさん2011/06/24(金) 21:49:01.31
難しいといわれてたオブジェクト指向をここまで簡単と言わせるJavaってすごいな
320 :デフォルトの名無しさん2011/06/24(金) 22:34:16.12
それって、オブジェクト思考が難かしかったんじゃなくて、慣れてなかっただけ
なんじゃないの?
321 :デフォルトの名無しさん2011/06/24(金) 23:27:29.97
テストは必要だけど、たくさん書くと
コード修正時のメンテナンスが大変になる。

だからテストもなるべく少なくするほうがいい。
もちろん少なくすると言っても必要なテストを省くという意味じゃないよ。

で、静的言語だとテストの一部を実際に使用するコード側に
移動して減らすことができる(実行前の静的テストに変更できる)
346 :デフォルトの名無しさん2011/06/25(土) 09:57:57.05
>>321
ふーん。不思議なことをいう人だね
ちょっと実例だしてみてよ
322 :デフォルトの名無しさん2011/06/24(金) 23:30:09.88
しかしコードを見るとオブジェクト指向でもなんでもないっていう
323 :uy ◆KOAgYBL/Xg 2011/06/24(金) 23:34:05.36
オブジェクト指向なんて
コード触って1〜2年目には誰だって辿り着くもんだぞ
変な書籍が大量にでて、それを読んで凝り固まった考えを流布し始める奴が多いから言葉の定義すら曖昧になって
オブジェクト指向とは一生かかっても誰も習得できない技術となった
347 :デフォルトの名無しさん2011/06/25(土) 11:00:05.60
>>323
Smalltalkなら1、2年で会得出来るだろうけど
JavaやC#だと下手すると一生解らないだろ
355 :デフォルトの名無しさん2011/06/25(土) 15:01:01.91
>>323
オブジェクト指向の肝はプログラミングじゃなくてモデリングだろwwww
356 :uy2011/06/25(土) 15:16:12.70
>>355
は?
オブジェクト指向の肝って何だよ?肝いなお前
Object Orientedってのはただの形容詞なんだよ
その後にAnalysisがつこうがDesignがつこうがProgrammingがつこうが何でもありだ
お前は肝いからUMLでお絵描きだけしてろ屑
358 :デフォルトの名無しさん2011/06/25(土) 15:26:14.37
uy本物 あえて名無しで書き込み

>>356
はああ?


>>355
は?
「コード」触ってりゃっていったわけで
お前はもしかして 本 読まないと無理なタイプ?
死ねよゴミ
324 :デフォルトの名無しさん2011/06/24(金) 23:38:03.51
しかしコードを見るとオブジェクト指向でもなんでもないっていう
325 :uy ◆KOAgYBL/Xg 2011/06/24(金) 23:50:05.42
オブジェクト指向は韓国みたいなもの
新しい画期的な概念がでてくると、「これはオブジェクト指向のひとつだ!」
みたいに言い出す こわい
327 :デフォルトの名無しさん2011/06/25(土) 00:25:32.89
オブジェクト指向型と関数型と静と動が合体した言語は無いの?
329 :デフォルトの名無しさん2011/06/25(土) 00:40:18.02
C++は基礎知識として必修させるべきだと思う。
OOPLや動的言語がどう内部で処理されてるか理解しない奴は土方。
330 :デフォルトの名無しさん2011/06/25(土) 00:43:44.33
>>329
それはいいね。
動的言語ばかり使っているやつって
内部実装に無頓着になりがちだから。

数値?文字? そんなのどっちも
変数に入れられるじゃん。みたいな。
334 :デフォルトの名無しさん2011/06/25(土) 00:53:13.31
>>329
OO プログラミングだけならいわゆる LL とかで、自分で実装してみるのも良いと思う。
337 :uy ◆KOAgYBL/Xg 2011/06/25(土) 01:10:20.83
>>330
内部理解とかもうどうでもいい
ハードを意識してプログラム組む時代は終わった
数値、文字列を、同じ箱に入れられないのはハードウェアの事情なだけで

そのゴミ、ハードウェア上でどのように数値、文字列を表しているかなんて、
それさえもひとつの手法でしかない為、知らなくても別に良い
10年たてば事情が変わってる可能性さえある
最高で完璧で枯れた技術だったら誰もが覚える価値はあるけど、現状そうではないと思う
340 :デフォルトの名無しさん2011/06/25(土) 01:28:56.64
ある知識が必要かどうかという話に、その知識を知らない人は参加できるか否か。

自分には>>330 の言う内部実装の知識はないが。
341 :デフォルトの名無しさん2011/06/25(土) 01:35:51.02
>>329と>330の間には溝がある気がしなくもないが
C++のvtableぐらいはやっとくとすごい有益
331 :デフォルトの名無しさん2011/06/25(土) 00:45:31.19
Javaとかでも = null が何を意味してるかわかってない奴多いし
332 :デフォルトの名無しさん2011/06/25(土) 00:52:21.94
>>331
333 :デフォルトの名無しさん2011/06/25(土) 00:52:57.33
>>332
338 :デフォルトの名無しさん2011/06/25(土) 01:10:41.56
>>333
335 :デフォルトの名無しさん2011/06/25(土) 00:54:17.37
なにを?
336 :デフォルトの名無しさん2011/06/25(土) 01:08:05.43
>>335
文章が分かり辛くてごめん。
オブジェクトシステムを自分で実装してみる。
342 :デフォルトの名無しさん2011/06/25(土) 05:05:48.23
動的言語の内部実装で言えばPerlのOOPシステムは
生で使うと内部実装が表に出まくりだな

クラスはパッケージであり、メソッドはパッケージに所属する関数であり
フィールドは単なる連想配列であり、結果として
オブジェクトとはパッケージ情報が付加されただけの連想配列である
…というのがまる見え
343 :デフォルトの名無しさん2011/06/25(土) 05:07:07.39
パッケージ…と書くとPerl用語になってしまうから
より一般化すれば名前空間ってところか
345 :デフォルトの名無しさん2011/06/25(土) 09:48:51.27
PythonのOOPもちょっと内蔵はみ出てて
内部実装見えちゃってるな
354 :デフォルトの名無しさん2011/06/25(土) 13:33:52.11
>>345
少し出てるね、メソッドはフィールドに関数オブジェクト突っ込んだものだし
メソッドが関数だから仮引数としてself渡されたり
ただ、オブジェクトありきの実装だからまだマシかも
362 :デフォルトの名無しさん2011/06/25(土) 16:19:46.84
>>354
まぁ、カプセル化はオブジェクト指向言語の必須条件じゃないからね。

348 :uy ◆yyC0rYWEq2 2011/06/25(土) 11:37:03.27
なんで、オブジェクト指向の話をしてるところで言語名がでてくる
それが
> 変な書籍が大量にでて、それを読んで凝り固まった考えを流布し始める奴が多いから言葉の定義すら曖昧になって
といってるんだよ

二度と話かけんなよ
349 :デフォルトの名無しさん2011/06/25(土) 11:50:56.90
優秀なエンジニア5人は二流の1000人を完全に凌駕する
http://el.jibun.atmarkit.co.jp/rails/2011/06/51000-6676.html


大規模開発www
352 :デフォルトの名無しさん2011/06/25(土) 12:48:03.07
難しい機能(OSとかフレームワーク自体の開発とか)だと
優秀なエンジニア5人は二流1000人を超えるかもしれないけど

でもソフトウェアの多くは、実装が難しくもない簡単な機能。
そんなものは一流のエンジニアでも二流のエンジニアでも
実装時間は変わらん。


分かりやすく例えれば、フランス料理フルコースを作るのに
一般の人がいくら頑張ってもまともに作れないけど、
通常の食事程度、弁当とかなら数が集まったほうが多く作れる。
一流シェフに弁当作らせても1000倍速く作れたりしない。
353 :uy ◆yyC0rYWEq2 2011/06/25(土) 13:01:55.57
その5人がメタプログラミングをどの程度まで極めているかによるんだよ
メタには限界なし。

あとは、その5人が、過去に何度か似たようなものを作ったことがあって
ソースコードを流用できる場合とか
1000人のほうは1から作っているのにたいして、5人のほうは過去のソースコードの組み合わせをしていくだけになる

ゼロからソースコードを書いた場合の開発効率とか、そういう次元の話はしてないと思うよそれ言ったヤツ
359 :デフォルトの名無しさん2011/06/25(土) 15:27:02.33
最近は関数型言語のように
副作用、つまり状態を変化させない
関数が流行っている。

オブジェクト指向でも
状態を変更させないように
変化させていくべきだ
361 :デフォルトの名無しさん2011/06/25(土) 16:16:54.26
>>359
imutableって計算機学の歴史の中でも古くからある概念なんだけどね。
なんで最近まで軽視されてたんだろ。
360 :uy ◆yyC0rYWEq2 2011/06/25(土) 15:29:23.00
OOはマジ宗教

聖書の書き換えをしながら勢力を大きくしていってる
たちのわるい宗派
363 :デフォルトの名無しさん2011/06/25(土) 16:33:35.37
C++の関数に付けるconstっていいよね。
オブジェクトが変更されないことが明示されてる。

で、これってコンパイル時に分かるわけだが。
370 :デフォルトの名無しさん2011/06/25(土) 17:25:14.09
>>363
int x = 0;
const int &y = x;
std::cout << y << std::endl;  # 0
x = 1;
std::cout << y << std::endl;  # 1
364 :uy ◆yyC0rYWEq2 2011/06/25(土) 16:34:37.87
RubyにもFreezがあるし、殆どの言語であるよ多分 ボケナス
それにRubyには大文字で変数宣言すると定数になるし
Ruby最強なんだよ ボケナス
365 :デフォルトの名無しさん2011/06/25(土) 16:39:35.08
なんでこの馬鹿は自信満々にアホなこと言うんだろう?
アホだからか
414 :uy ◆yyC0rYWEq2 2011/06/26(日) 01:01:21.81
>>365
へえ
Rubyにはconstにかわるものがないと思ってるのか
レベルひく・・・
415 :デフォルトの名無しさん2011/06/26(日) 01:22:49.02
>>414
rubyはもういいよw
選択肢外だから話題に出さないで
邪魔くさい
416 :uy ◆yyC0rYWEq2 2011/06/26(日) 01:26:58.51
>>415
http://glossary.tank.jp/t0823.html
この人がさ
2000年の時点でこれ言ってんだよね

残念だけど2011年になって、外国からの書籍も日本も来るようになっても、

お前みたいなおばかはいるみたいで。。。
418 :uy ◆yyC0rYWEq2 2011/06/26(日) 01:30:04.37
>>415
で、選択肢は何をもってんだ?

Rubyと同等に見れる可能性のある言語って、Python,Lispくらいなんだけど
まさかPerlとかゴミHaskellをだしてくるわけじゃないだろうな
PythonとLispはそのどちらも、日本語資料がとぼしく、一部の奴が好んで使ってるだけで
特に大学でPythonなんて教えてるとこよりはRuby教えてるところのほうが多いと思うが

動的言語でRubyという選択肢を除外なんて、何をいっているのやら。知ったか君は邪魔だから 消えてくれ
366 :デフォルトの名無しさん2011/06/25(土) 16:43:27.09
実行してから分かるのなら、
実行前に教えてくれと思う。

一本道を歩いていたら
行き止まりに、ここで行き止まりですって
書いてあるようなもん。
道の入口に、行き止まりと書いておけ。
367 :デフォルトの名無しさん2011/06/25(土) 16:54:50.91
>>366
一本道なら、教えてもらわなくても分かる
368 :デフォルトの名無しさん2011/06/25(土) 16:57:14.38
完全に初期化のみ、変更不可って理想的ではあるけど、コピーコストがバカにならんね。
あれさえどうにか出来れば、もっと普及できたんだろうけど。
369 :デフォルトの名無しさん2011/06/25(土) 17:21:25.98
>>368
それ以前に参照でオブジェクトを追跡できなくなるのがまずい。
オブジェクト "ヰ" をポインタ "ゑ" で追跡してたとき、
オブジェクト "ヰ" が意味する値が変化したことを "ゑ" に通知する必要がある。
更に、 "ゑ" もその結果に応じて変化することはできないんで、更に上位の参照体に
"ゑ" が意味する値が変化したことを通知する必要が出てくる。
372 :デフォルトの名無しさん2011/06/25(土) 17:47:06.10
>>369
何を言ってるのかよく分からない
"ヰ"はオブジェクトじゃなくて変数?
373 :デフォルトの名無しさん2011/06/25(土) 18:28:29.24
>>372
オブジェクトそのもの。
374 :デフォルトの名無しさん2011/06/25(土) 18:43:49.13
>>372

type a = 5;
type *p = &a;

a+=5;

mutableだと*pを見ていれば、
5が10になった事がわかる。

const type a = 5;
const type *p = &a;

a2=a+5;
imutableだと*pからじゃ5が10に
なった事が判からない。
376 :デフォルトの名無しさん2011/06/25(土) 19:23:37.92
>>368
オブジェクトがすべてリスト構造に変換出来るんであれば
ある程度緩和できる話しだけどね。
377 :デフォルトの名無しさん2011/06/25(土) 19:25:23.35
>>373
オブジェクトそのものが変化するならそのオブジェクトはmutableだし参照元は何もしなくても良いだろ
>>374の例を見ればやっぱり変数の束縛先の変化の事を指してるのかな
immutableオブジェクトの例としてconstを使うのはどうかと思うが
378 :デフォルトの名無しさん2011/06/25(土) 19:26:01.95
>>376
リストにappendしたり、中の要素を変更したりするだけで
リストの全コピーが発生するのが困るんだが

リスト構造だと何が緩和されるの?
381 :デフォルトの名無しさん2011/06/25(土) 20:04:09.85
>>378
変更後のオブジェクトは変更したメンバーだけ持って、
変更前のメンバーは前のオブジェクト参照すればいいでしょ。
382 :デフォルトの名無しさん2011/06/25(土) 20:28:29.53
>>381
だからリストのコピーが発生してるじゃん
398 :デフォルトの名無しさん2011/06/25(土) 22:30:04.19
>>382
function Example()
{
this.instance = {};
}

Example.prototype.Reference(field)
{
if( null != this[field] ) return this[field][field];
for(var original = this.original; null != original; original = original.original )
{
if( null != original[field] )
{
this.instance[field] = original[field][field];
break;
}
}
this[field] = this.instance;
return this[field][field];
}
こういう感じ。objectを内部的に変更するから、
厳密にimutableじゃないけど、objectの外から見る限りは完全にimutable。
ちなみにjavascriptに限らず大抵の言語は同じようにできる。
371 :デフォルトの名無しさん2011/06/25(土) 17:35:22.51
まぁ、正確には参照先を変更できないって事だわな。
それをいうなら、javaでもC#でもconstは用意できる。

interface ConstXxxxxx
{
getYyyyyy();
}

ConstXxxxxxをとる限り実質変更不可能。
そもそもJavaにconstが無いのは、interfaceで実現できるから
なんだがなぁ。Javaの設計者が如何に思考巡らせていたとしても
結局Javaグラマーがアレだからconstが無い不便な言語、
もしくはconstダサい的な流れになっていく。
383 :デフォルトの名無しさん2011/06/25(土) 21:19:06.65
静的言語厨はSQLもコンパイル時にチェックしてるんだよな?
コンパイル時に型チェックできないならSQL使わないんだよな?
384 :デフォルトの名無しさん2011/06/25(土) 21:29:17.35
>>383
ストアド使うか、カプセル化してチェックするっていうのは基本だが。
385 :デフォルトの名無しさん2011/06/25(土) 21:32:21.36
SQLでコンパイルというのが全く持って曖昧だと気がつかないのか。
SQL文のプリコンパイルの事を言っているのか、静的言語からSQLを
呼び出すときのことを入っているのかはっきりしてくれ。

そもそもコンパイル時に型チェック出来ないなら使わないなんて誰が
言ったんだ? 勝手に話を面白くするな。
JavaもC++もRTTIはそれなりに使うぞ?
403 :デフォルトの名無しさん2011/06/25(土) 23:07:54.69
>>385
C++でRTTI使いまくるのは設計がダサい証拠、って俺の師匠が言ってた
386 :デフォルトの名無しさん2011/06/25(土) 21:38:19.06
つまり安全ではない、と
388 :デフォルトの名無しさん2011/06/25(土) 21:45:40.20
>>386
SQLに限らずホスト言語と組み込み言語の間の型マッピングは手動の
事が多いから、そりゃコンパイラで捕らえられないマッピング間違い
もあるだろうさ。

で、それがどうかしたの?
何のためのテストだと思っている?
387 :デフォルトの名無しさん2011/06/25(土) 21:40:46.89
たとえば同じバグがあったとして
1.テストを書かないと、バグがあることがわからない。
2.テストを書かなくても、バグがあることが分かる。
この二つの状態。

2の方が優れているのは言うまでもない。
391 :デフォルトの名無しさん2011/06/25(土) 21:52:40.01
>>387
バグの種類によるだろ
393 :デフォルトの名無しさん2011/06/25(土) 21:56:08.37
>>387
でも結局テスト書くよね?
静的だろうが動的だろうが。
395 :デフォルトの名無しさん2011/06/25(土) 21:58:41.70
>>393
> でも結局テスト書くよね?
> 静的だろうが動的だろうが。

まさか屁理屈いおうとしてないか?

テストにはいろんな種類があって、
そのうちの型チェックに関する部分のテストは
静的言語では書きません。

お前は、それ以外のテストを書くから
テストは必要だという、屁理屈に
つなげようとしていると見た。
408 :デフォルトの名無しさん2011/06/25(土) 23:35:51.98
>>395
いや、それだけの話なら、正しいスレタイは
「動的言語は型チェックのテストコードを書くから面倒」
じゃないかなと。
390 :デフォルトの名無しさん2011/06/25(土) 21:52:01.38
SQLか。

テーブルのスキーマを変えたとき、たとえば
フィールドの型を変えたり項目を減らしたりしたとき、
そのフィールドを参照しているコードを
検出できたらいいとは思うよね。
396 :デフォルトの名無しさん2011/06/25(土) 22:02:39.47
>>390
一つの言語内の問題ではなく異なる言語間のブリッジの問題だからね。
ぶっちゃげ静的動的はあまり関係ない。

データマッピングを間違えたところで静的型付けだとデータ変換時に
例外吐くのが動的型の場合はその後のロジックでエラーを引き起こす、
その程度の違いでしょ。
401 :デフォルトの名無しさん2011/06/25(土) 22:43:31.58
>>396
いや動的型付けだろうと型変換に失敗したら例外吐くぞ
まさか動的型だと変換すらしないと思ってる?
404 :デフォルトの名無しさん2011/06/25(土) 23:10:23.21
>>401
動的言語でも型変換はするでしょ。ただJDBCやDBIなどの低水準のDB接続APIに
関して、動的言語の場合はAPIの実装が結果テーブルのメタデータ読んで自動的に
適切な型変換をするので、APIを叩く利用者側ではカラム値を引っ張ってくるのに
特に型指定する必要が無い場合が多いよね。型指定しなくても常に成功する。

静的言語の場合は多くはgetStringみたいに型指定されたメソッドを叩く必要が
あるし、正しいメソッドを利用しないとカラム値を引っ張った時点で例外を吐く。

動的言語ではノーエラーでカラム値を引っ張れるとしてもそれが想定した型の値
でないと後のロジックで破綻するから、結局静的型と同様に型の検証とかDAOの
テストを書いたりする必要がある。

要するにSQLとかDBアクセスが安全か否かに関して静的動的云々はあまり関係
が無くて、結局テストを書かないといけないという事。
409 :デフォルトの名無しさん2011/06/25(土) 23:37:44.68
>>404
> 結局テストを書かないといけないという事。

うん、結局という話にするから
おかしくなっちゃうんだよ。

飛行機で行っても、船で行っても
結局、アメリカにつくだろう?

結局、アメリカにつくから同じだと思うか?

問題は結局という最終的な結果じゃなくて
そこに辿りつくまでの話よ。
同じ結果になるのなら、楽な方がいいだろう?
問題は早く見つかるほうが楽だよ。
410 :デフォルトの名無しさん2011/06/25(土) 23:44:58.34
>>404
それってAPIの問題な希ガス
411 :デフォルトの名無しさん2011/06/26(日) 00:01:09.73
>>409
あ〜基本的に自分は>>383とか>>386をピンポイントでdisりたいので
あって静的言語を叩いたり動的言語を持ち上げたりその逆をしたりする
意図はないから。

ただSQLの呼び出しに関連した問題は本質的には異なる言語とのブリッジ
にまつわる問題であって静的動的云々の言語の違いはそれと比べれば副次
的なものだと考えている。

>>410
うん。APIの問題なんだよ。言語はあまり関係ない。

内部で型変換するAPIが多い動的言語もユーザが型指定する必要のあるAPI
が多い静的言語でも発生箇所が異なるだけで問題は結局発生するのだから
(繰り返すけど言語ブリッジの問題だから)、静的動的云々は安全性の問題
にはあまり関係がないと思う。

静的型にしても例えば文字列型のカラム値をgetDoubleで取りに行って
例外を吐くかは実行時にしか解らないわけで、結局テストを書くしかない。
412 :デフォルトの名無しさん2011/06/26(日) 00:22:46.21
>>411
■スキーマの検証

 モデル・クラスがLINQ to SQLデザイナを使用して定義されたとき、
データモデル・クラスにあるプロパティのデータ型は、
そのデータベース・テーブルのデータ型に対応します。

例えば、もしDinnersテーブルの“EventDate”列が“datetime”の場合、
LINQ to SQLが作成したそのデータモデル・クラスは“DateTime”
(これはビルドインの.NETデータ型です)に型付けされます。
つまり、それに対してコードからint型やbool型を割り当てようとした場合には
コンパイル・エラーになり、実行時に無効なstring型をそれに明示的に変換しようとした場合には、自動的にエラーが発生します。
^^^^^^^^^^^^^^^^^^^^^^^^
413 :デフォルトの名無しさん2011/06/26(日) 00:36:39.11
>>412
それは静的言語が偉いと言うよりもまずO/Rマッパが偉いんだと思うw
テーブルスキーマとデータクラス等々の定義を自動で同期するんだよね。

ただデータクラスに正しくマッピングされれば後は静的言語の型検証を
有効に活用できるというわけで、確かに静的型の方が有利だな。
392 :デフォルトの名無しさん2011/06/25(土) 21:53:26.69
というかSQLは動的言語とのたまった御仁にどう動的言語なのか説明を
求めるも、「動的SQL」云々と口走った以外は音沙汰無しなのだが。
どこに行った?
394 :デフォルトの名無しさん2011/06/25(土) 21:56:53.83
http://msdn.microsoft.com/ja-jp/library/1t3y8s4s(v=vs.80).aspx

null 許容型 (C# プログラミング ガイド)

null 許容型は、System.Nullable 構造体のインスタンスです。
null 許容型は、基礎となる値型の通常範囲の値だけでなく、null 値も表すことができます。

たとえば、Nullable<Int32> ("Int32 の Null 許容" と読みます) には、-2147483648 から
2147483647 の任意の値、または null 値を割り当てることができます。

Nullable<bool> には、true、false、または null の値を割り当てることができます。
数値型と Boolean 型に null を割り当てる機能が便利なのは、値を割り当てることができない
要素を含むデータベースや他のデータ型を処理するときです。

たとえば、データベースの Boolean フィールドには、値 true または false を格納するか、未定義にすることが可能です。
397 :デフォルトの名無しさん2011/06/25(土) 22:25:42.60
> 動的型の場合はその後のロジックでエラーを引き起こす、
> その程度の違いでしょ。

それが怖いんだよ。
その後のロジックでエラーを引き起こすということは、
エラーを引き起こすロジックを実行しない限り
エラーがあることが分からないってこと。

こんな状態は想定外でしたという
システムトラブルの記者会見はこうやって起こる。
399 :デフォルトの名無しさん2011/06/25(土) 22:33:13.14
そんなめんどくさいことまでして
やりたくない。

引数、もしくは関数にconstって付けたら
この関数を実行しても
この引数、オブジェクトは状態を変えません。

変えようとするコードを書いたら
コンパイルエラーになります。

って方が何倍もよい。
400 :デフォルトの名無しさん2011/06/25(土) 22:35:42.33
>>399
関数型言語ですね
402 :デフォルトの名無しさん2011/06/25(土) 23:03:48.18
>>399
如何にコピーコストを抑えるかっていう、それとは別問題の事を書いたんだけど。
406 :デフォルトの名無しさん2011/06/25(土) 23:28:56.26
静的言語でSQL書くなら、埋め込みSQL使えばいいだろうに。
ちゃんと型チェックしてくれるぞ。
417 :デフォルトの名無しさん2011/06/26(日) 01:28:59.02
んなこと言われてもどうでもいいもんはどうでもいい(笑)
419 :uy ◆yyC0rYWEq2 2011/06/26(日) 01:30:48.19
>>417
そうだよね
お前には近いこなせないの知ってて言ってる(笑)

効率に気づけないんだから仕方ないよね
420 :デフォルトの名無しさん2011/06/26(日) 01:32:39.23
この糞コテ、だんだん精神的にマズくなってんだろなって思う
423 :デフォルトの名無しさん2011/06/26(日) 01:35:20.63
>>420
かまってちゃんが攻撃的なのはよくあること
普通のこと
普通のかまってちゃんが普通の行動をとってるだけ
421 :デフォルトの名無しさん2011/06/26(日) 01:33:35.43
まあそうムキになるなよ(笑)
どうぞどうぞ、固執してなさい
でも邪魔くさいからrubyの話題を持ってくるのはやめてね
わかった?
424 :uy ◆KOAgYBL/Xg 2011/06/26(日) 01:35:37.22
>>420
感がいいの?


>>421
おkwwwwwww っじゃwwお前は一生Ruby使うなwwwwwww 絶対に使うなよ?
使ったらお前の「負け」でwwwwwwwwwwwwwwwwwwwww


使うなよ?

人が親切心でおしえてんのにねw
428 :デフォルトの名無しさん2011/06/26(日) 01:37:56.79
>>424
なんだ、ただのガキか
422 :デフォルトの名無しさん2011/06/26(日) 01:34:08.31
るびー
Ruby
【プログラミング】
・まつもとゆきひろ氏が開発している、日本生まれのオブジェクト指向スクリプト言語。
・その強力な機能と最初から日本語の資料が整っている事からすれば、生まれ故郷の日本ではもっと普及しても
良さそうなものだが、拝外思想の持ち主で遠く太平洋をはさんだアメリカばかりに気を囚われて、
足元で起こっている変化に気付かない多くの連中には、当分気付かれ、受け入れられそうも無いもの。
・「当分」が解けるのは、アメリカで「Ruby」の本が出版され、それが日本で翻訳される頃あたり;-p
2001/01/01更新


426 :デフォルトの名無しさん2011/06/26(日) 01:37:01.44
>>422
そんなもん持ち出さなくても、rubyは十分に普及してるじゃん
ゴミの割にはよくやってるよ
429 :デフォルトの名無しさん2011/06/26(日) 01:39:44.92
日本語しか読めない奴には、日本語の資料が充実してるかどうかが死活問題だからな
英語読めないなんて軽蔑するけど、まあ馬鹿にもプログラミングする権利はあるしな
430 :uy ◆KOAgYBL/Xg 2011/06/26(日) 01:43:43.71
>>428
ゴミ乙


>>429
まだそのフィールドにいるんだ
じゃあお前なんでこの板にいるわけ? 英語が読めるんだったら海外bbsいってろハゲ

在日ではなく日本人だったら日本語が読みやすいのは当たり前なんすけどーwwwwwwwwwwwwwwww
読めるか読めないかじゃなくて
学習速度のこといってんだわwwwwwwwwwwwwwwww
学校の教科書を全部英語でかかれてんのとお、www 日本語でかかれ店のどっちがいいですかあああ??w?Ww?Www
434 :デフォルトの名無しさん2011/06/26(日) 01:48:34.94
>>430
日本語のほうが読みやすい?
他に選択肢ないくせに、なにが日本語の「ほうが」だよww
438 :デフォルトの名無しさん2011/06/26(日) 01:55:19.95
>>430
日本語が不自由なやつだな
442 :uy ◆KOAgYBL/Xg 2011/06/26(日) 02:03:42.32
>>434
はっああァァアアアアアアァァ?????????????????

railsとか、日本語だとおもってんの?wwwwww
ocraとか英語ドキュメントしかないけど、俺はその英語ヘルプ読んで使えるようになったんですけどぉぉwwwww
Rubyは日本語資料も多くwww英語資料も多いんだよwwwwwwwww両方wwwwwwwwwwwwwwwwwwwwwwwwwwwww
431 :デフォルトの名無しさん2011/06/26(日) 01:46:23.47
英語だろ?
433 :uy ◆KOAgYBL/Xg 2011/06/26(日) 01:47:37.08
>>431
だから
だから
【現象】
・おそらく、海馬がイカれていて記憶を留める事ができない上に、前頭葉と側頭葉が魚並みに退化してしまった人種なんだろうけれど、それを差し引いたとしても込み上げて来る感情を我慢できずに吐き出してしまう言葉。
・今日もどこかで聞こえる怒りの声。 「だぁ〜かぁ〜らぁ〜(怒)」
http://glossary.tank.jp/t0629.html

だからさぁ 、、 そうかそれなら国へ帰れ
432 :デフォルトの名無しさん2011/06/26(日) 01:47:01.33
静的な型に対する最も一般的な反対論は、プログラムを無駄に長くして、プログラマーが自分の思考を表現するうえで妨げになること、
そしてソフトウェアシステムのある種のダイナミックな変更のパターンが不可能になることである。
しかし、こういった議論は、冗長で柔軟性が低いと感じられる特定の型システムに対する反対にしかなっておらず、
静的な型付けという一般的な思想に反対するものにはなっていない。

たとえば、Smalltalkの発明者であるAlan Kayは、こう言ったことがある。
「私は型に反対しているわけではない。『完全な苦痛』にはならないような型システムを見たことが無いので、
動的な型付けを支持しているのである」
439 :デフォルトの名無しさん2011/06/26(日) 02:00:42.89
>>432
> 静的な型に対する最も一般的な反対論は、プログラムを無駄に長くして、プログラマーが自分の思考を表現するうえで妨げになること、
それはお前の思い込みでしか無いよ。
437 :デフォルトの名無しさん2011/06/26(日) 01:52:15.63
静的型システムは単純なエラーを検出できるだけだが、
「単体テストならもっと広い範囲のエラーを検出できるのだから、
わざわざ静的型システムを使う必要は無い」とまでいう人々もいる。

私たちは、このような議論には見落としがあると思う。
確かに、静的型システムは単体テストの代わりになるわけではないが、
プログラムの性質を確認するために普通なら必要だった単体テストの数を減らしてくれる。

さらに、単体テストは静的型付けの代わりにはならない。
エドガー・ダイクストラが言ったように、テストが証明できるのはエラーの存在であって、
エラーの不在ではない。静的型付けが与えてくれる保証は単純なものかもしれないが、
どれだけテストをしたとしても得られない本物の保証なのである。
592 :デフォルトの名無しさん2011/06/26(日) 15:51:05.66
>>583
>>437
440 :デフォルトの名無しさん2011/06/26(日) 02:01:26.34
ぶっちゃけ、型を定義する程度の簡単なことを
めんどくさいと言ってやらないやつは
テストもめんどくさいと言ってやらないんだろう。
443 :デフォルトの名無しさん2011/06/26(日) 02:04:25.57
>>440
本心が透けて見えてるよ
446 :uy ◆KOAgYBL/Xg 2011/06/26(日) 02:11:18.45
>>443
たったの3行に
めんどくさい をって単語が2個もヒットしたね。

p"ぶっちゃけ、型を定義する程度の簡単なことを
めんどくさいと言ってやらないやつは
テストもめんどくさいと言ってやらないんだろう。
".scan(/めんどくさい/).size

# => 2
447 :デフォルトの名無しさん2011/06/26(日) 02:16:17.40
反論できない時の模範的な解答例。>>446
451 :uy ◆KOAgYBL/Xg 2011/06/26(日) 02:38:03.18
>>447
はぁ?




型については、
まともなリファクタリングしたことあればわかると思うけど
一度つくった設計そのものをかえるようになりファクタリングするときって
静的言語じゃ絶望的だぞ
引数、戻り値、をそれぞれかえるのと他に、 型情報までかきかえなきゃならなくなるんだから

小規模ならまだしも、
もし大規模なプログラムで根幹からちょっと仕様変更しなくちゃならなくなったときは
下手に設計していると頓挫して空中分解
そういうところから炎上やデスマになってると思うんだよね
453 :デフォルトの名無しさん2011/06/26(日) 02:44:40.88
>>451
これははずかしい
456 :デフォルトの名無しさん2011/06/26(日) 02:52:14.36
>>451
はぁ?

最近のIDEでまともなリファクタリングをしたことがあるなら判ると思うけど、
抽象クラスのメソッドシグネチャを書き換えると具象クラスのそれも自動的に
書き換えたりと、レキシカルに特定出来るところは自動的に書き換えるのは
普通だし、書き換えの副作用の範囲が即座に型エラー等として見て取れる
あたりはより「安全」だぞ。

動的型の場合「根幹からちょっと仕様変更」したときにその副作用の範囲を
どう特定するのか是非ノウハウを聞かせてもらいたいものだ。
466 :uy ◆KOAgYBL/Xg 2011/06/26(日) 03:09:10.91
>>456
はぁ?Ww
その程度で出来るものをリファクタリングとはいいませんから^^^^^^^^^
468 :デフォルトの名無しさん2011/06/26(日) 03:13:05.65
>>466
お前の俺俺定義はどうでもいいよ。

リファクタリングの本に、なにがリファクタリングかはちゃんと書いてあるから。
469 :uy ◆KOAgYBL/Xg 2011/06/26(日) 03:14:24.94
>>468
おまえ、すっげーゴミ本読んでるんだな

著者だれの本読んだ?w

できればその著者のかいたソースコードも乗せてくれよ
リファクタリングほど個人差の出るものねーから
472 :デフォルトの名無しさん2011/06/26(日) 03:15:15.06
>>465
何で動的厨は勝手に話を膨らませて面白おかしくするんだ。
誰が「型エラーさえチェックされれば満足」なんて言った?
誰もそんなことは言っとらん。

>>466
お前もだ。誰が「これでだけで出来る」なんて言った?

リファクタリングの基本はあくまでテストで、IDEの自動書き換えも型エラーも
リファクタリングをサポートする「便利機能」に過ぎないよ。
しかし動的言語ではこれらの「便利機能」の実装すらかなりプアな状況にあると
いうのが俺の認識なんだが、違う?
473 :デフォルトの名無しさん2011/06/26(日) 03:15:28.66
>>469
英語だよ。大丈夫?
http://www.refactoring.com/
474 :uy ◆KOAgYBL/Xg 2011/06/26(日) 03:21:17.10
>>473
ソースコードのリンクを載せろ
それ以外は読まない

bifoar

after

ってリファクタリング本なら、あるだろ
もしないならゴミ本決定
475 :デフォルトの名無しさん2011/06/26(日) 03:21:45.96
>>466
そもそもお前自身がメソッドシグネチャの書き換え程度の話しか出して
いないだろw 自分で>>451を読み返せ。
他人を笑う前に自分の後出しジャンケンを笑えよw
477 :uy ◆KOAgYBL/Xg 2011/06/26(日) 03:23:39.03
>>475
はっああぁlっぁアァァアアアアア??????????????????
根底からって言ってるのにどうよんだらそうなるわけ?
勝手に俺のレスのいいたことを読み間違えてる分際で?
死ねおyゴミんm
479 :デフォルトの名無しさん2011/06/26(日) 03:25:50.73
>>474
"bifoar"って思わずググってしまったじゃないか。笑わせんなw

とりあえずuy ◆KOAgYBL/Xgは英語も読み書きできず豊富なUML図を
用いた説明も読んで理解出来ないという事はよく解った。
480 :デフォルトの名無しさん2011/06/26(日) 03:27:21.17
>>477
だから「根底」の例を出せよ。具体例を。
基底クラスのメソッドシグネチャ書き換えかw
482 :デフォルトの名無しさん2011/06/26(日) 03:31:13.72
>>472
だって型チェックの話ばかりじゃん。
動的型言語では型チェックを一々テストでも書かないよ。考え方が違うから。
特定のクラスのインスタンスを渡さないと動かないことを強制するんじゃなくて、特定の振る舞いを持つなら良しとする。
パターンやGenericsを駆使しなくても、その言語の普通の書き方で十分な拡張性や柔軟性がある。
自分の足を打ち抜くのが怖い人はJava使ってれば良い。
487 :uy ◆KOAgYBL/Xg 2011/06/26(日) 03:36:52.89
>>480
へえぇ?? まずそっからなんかwwwwwwwwwwwwww

Aプログラムを納品し、似たような機能のBプログラムを作らなくちゃならなくなったとき

Aプログラムの設計はもうズタズタだから、最初から書き換えましょう とかそういう場面だよ
489 :uy ◆KOAgYBL/Xg 2011/06/26(日) 03:38:41.19
>>479
だからねぇ・・・リファクタリングって、個人の能力が如実に表れるものであって、

おまえにとってその本が良書でも、万人にとってはそうではなく
その著者よりもレベルの高いリファクタリングが可能なやつはごまんといるわけだ
よくそんな「ゴミ本よんでます」なんて公言できますね、
多分おまえ、一定レベルの技術者からは覚めた眼で見られているタイプ、
一定レベル以下の初心者からは、先生(笑)とかってよばれるかもなw 最初の1年だけ・・・
493 :デフォルトの名無しさん2011/06/26(日) 03:43:32.54
>>482
>だって型チェックの話ばかりじゃん。
〜〜〜〜〜〜〜〜〜 深 い 谷 〜〜〜〜〜〜〜〜〜〜〜
>それさえチェックされれば満足なのかよと言いたいが。

この二つの間の論理の飛躍、というか決めつけに気がつかないのであれば
もう何も言うことはない。型の話が多いのは認めるけど、それだけで満足
しているかはまた別問題だろう。

あと静的な型チェックの話は静的言語にあって動的言語には無いメリット
だから、静的厨にとっては話しやすいネタなんだよな。
他の差異、例えばより柔軟なリフレクションやevalの類などは動的言語に
あって静的言語には無いものだから、動的側から話を振ればよい。

> 自分の足を打ち抜くのが怖い人はJava使ってれば良い

自分は怖い人だからそうするわ。
ただ俺が作った銃で他人様が足を打ち抜く例もあるわけで。
496 :デフォルトの名無しさん2011/06/26(日) 03:49:19.98
>>487
>Aプログラムの設計はもうズタズタだから、最初から書き換えましょう
>とかそういう場面だよ

それリファクタリングと違う。そもそもだな。

>>451
>もし大規模なプログラムで根幹からちょっと仕様変更しなくちゃならなくなったときは

元々言っていたことと全然話が変わっているだろう。
497 :デフォルトの名無しさん2011/06/26(日) 03:51:10.67
>>496
ほっとけよ精神薄弱者なんだから。
546 :5452011/06/26(日) 10:51:19.59
あ、>>482がすでに同じようなこと書いてた
547 :デフォルトの名無しさん2011/06/26(日) 11:02:36.37
>>493
それだけで満足じゃないなら、コンパイルして通ればもう安全、
じゃないってことだよね?
安全なプログラム書くためにはテスト必要だよね?
テスト書くんだよね?書いてるんだよね?

で、型エラーはテスト実行時に見つかるよね?
何が問題なの?
549 :デフォルトの名無しさん2011/06/26(日) 11:14:20.56
>>547

>>482の流れだと

静的言語:型チェックのテストを書く。静的に型チェックされる。
動的言語:型チェックのテストを書かない。静的に型チェックされない。

ということになるかな?
動的言語は安全そうには見えないが……
550 :デフォルトの名無しさん2011/06/26(日) 11:18:13.92
>>549
型付け自体が弱くなければ、テスト実行時に型チェックされる
441 :デフォルトの名無しさん2011/06/26(日) 02:02:43.37
急がば回れ。

型書いとくと
あとで楽になる。

日本にはいいことわざがあるよ。
444 :デフォルトの名無しさん2011/06/26(日) 02:09:21.65
てか基地外は放置しろよ。
まぁ、似たような基地外が立てたこのスレで言うのも何だけど。
448 :デフォルトの名無しさん2011/06/26(日) 02:30:13.90
型宣言の手間に費やす労力は代わりにIDEの補完機能の精度向上によって十分に
報われている気がする。動的言語向けのIDEも頑張ってはいるけれども、やはり
補完の精度では型情報を使って候補を絞り込める静的言語には敵わない。
他にも最近のIDEは型の妥当性をコーディング時にリアルタイムで検証するから、
間違った型への代入等々はそれこそビルド"前"にエラーとして警告される。
これもポカよけとして非常に有用。

ActionScriptなんかは動的型のAS2からAS3に移行するに当たって静的型を、
それも動的型も併用可能という形で導入したのだけれども結局はあっという間に
型付きでのコーディングが多数派となった。
そんなに動的型が本質的に優れているのであれば開発者の多数は動的型での開発
に留まったと思うのだけれども当時のFlexBuilderとか使っていれば型付きでの
コーディングの効率の良さは明らかだったからね。
静的型を導入してもそのデメリットは十分に補うことが出来るという良い事例。
450 :デフォルトの名無しさん2011/06/26(日) 02:37:48.08
>>448
グラフィック中心のFLASH使いは動的な書き方が多いけど
FlashDevelop使うような連中はJava風な書き方になってるね
449 :デフォルトの名無しさん2011/06/26(日) 02:32:34.43
型があったほうが楽にならない?
コード補完してくれるし
正しい位置にジャンプしてくれるし。

コード書いているときに思考を邪魔されたくないから
適当な変数名付けることってない?

俺その場ですぐに適切な変数名ってつけられないんだよね。
だって俺の思考はすでにもっと先のコードを書いているから。
452 :デフォルトの名無しさん2011/06/26(日) 02:42:47.30
どれが一番権威のある本?

リファクタリング―プログラムの体質改善テクニック
http://www.amazon.co.jp/dp/4894712288/
マーチン ファウラー

リファクタリング・ウェットウェア ―達人プログラマーの思考法と学習法
http://www.amazon.co.jp/dp/4873114039/
オライリー

Java言語で学ぶリファクタリング入門
http://www.amazon.co.jp/dp/4797337990/
結城 浩
478 :デフォルトの名無しさん2011/06/26(日) 03:25:09.93
>>452
そういうのは真ん中のを一番下に持ってこなきゃ
454 :デフォルトの名無しさん2011/06/26(日) 02:46:55.32
だがどこが恥ずかしいかは言えない。本当に恥ずかしいやつめ。
457 :デフォルトの名無しさん2011/06/26(日) 02:52:22.07
根底からリファクタリングするって事自体があり得んよなぁ。
それぐらいだったら、元のコードの横に(レイヤー的に)増設したほうがましだ。
459 :デフォルトの名無しさん2011/06/26(日) 02:54:38.44
増設に増設を重ね。そしてしまいに崩れる。
それをどうにかする方法はないか。

そこからリファクタリングという技術が
生まれたことを知らないのか?

>>457
お前はまだ、リファクタリングの入り口にすら
たどり着いていない。
460 :デフォルトの名無しさん2011/06/26(日) 03:01:00.53
現実見ろよ。
あと、多分勘違いされてると思う。俺の方は、標準ライブラリに依存した
箇所さえ動作を変えるような方法だ。
そもそもあなたのリファクタリングは、何のためのリファクタリング?
463 :デフォルトの名無しさん2011/06/26(日) 03:06:17.72
>>460
なんのためのリファクタリングかって?
それ、リファクタリングの本の最初の方に答えが書いてあるよ。

Java言語で学ぶリファクタリング入門より

リファクタリングの目的

「バグとり」や「機能追加」はリファクタリングではありません。
それではリファクタリングの目的はなんでしょうか?
 リファクタリングには次のような目的があります

◆バグを見つけやすくする
「バグとり」その者はリファクタリングではありません。しかし、リファクタリングを行うと
プログラムが整理され、潜んでいるバグを見つけやすくなります。


◆機能追加しやすくする
「機能追加」そのものはリファクタリングではありません。しかしリファクタリングを行うと
プログラムに新しい機能を追加しやすくなりますs。


◆レビューしやすくする
464 :デフォルトの名無しさん2011/06/26(日) 03:06:23.64
>>460
>そもそもあなたのリファクタリングは、何のためのリファクタリング?

「現在の実装の振る舞いを変えずに」コードの可読性保守性を上げたり
パフォーマンスを上げるためにコードを書き換えること。
リファクタリングとはそういうものだと思うが違うの?
461 :デフォルトの名無しさん2011/06/26(日) 03:02:46.19
>標準ライブラリに依存した箇所さえ動作を変えるような方法だ。

具体例。
462 :デフォルトの名無しさん2011/06/26(日) 03:06:03.52
仕様を変えるのはリファクタリングと言わない。
正しくリファクタリングなのであれば、
普通テストを書いているので型エラー以外も含めて特定可能。
467 :デフォルトの名無しさん2011/06/26(日) 03:12:00.89
>>462
リファクタリングを行うために
「テストを書く」という準備をする必要がある。それも正しいけど、
「型をちゃんと書く」という準備をすることも正しいよ。

テストだけが、リファクタリングで動作に変化が起きていないことを
証明する方法じゃないということ。
コンパイラ・IDEの力を借りて自動的に行うこともできる。

テストはテストから漏れている部分、つまりバグがある箇所は
特定不可能だからね。
465 :デフォルトの名無しさん2011/06/26(日) 03:06:57.68
つうか型エラーの話ばかりするけど、
それさえチェックされれば満足なのかよと言いたいが。
470 :デフォルトの名無しさん2011/06/26(日) 03:14:43.59
一番権威があるリファクタリングカタログw

http://www.refactoring.com/catalog/index.html

この中に含まれているものは
リファクタリングです。
511 :デフォルトの名無しさん2011/06/26(日) 04:23:00.73
>>470に示されたリファクタリングを忠実に実行するのは結構難しいな。
単一のコードならまだしも不適切な関連だらけだと修正が波及的に増大する。
ツールの補助がないと無理。
476 :デフォルトの名無しさん2011/06/26(日) 03:22:46.28
◆バグを見つけやすくする
「バグとり」その者はリファクタリングではありません。しかし、リファクタリングを行うと
プログラムが整理され、潜んでいるバグを見つけやすくなります。


◆機能追加しやすくする
「機能追加」そのものはリファクタリングではありません。しかしリファクタリングを行うと
プログラムに新しい機能を追加しやすくなりますs。


そうだろ。やりたいのはコレだろ。でも現実問題、自社のライブラリやら、社外のライブラリを
直接いじる事はできないんだ。だから、変更したい箇所にAdapterやらBridgeを噛ませて動作を整えるしかないんだ。
現状、自分で修正可能なプロジェクトの範囲なら、リファクタリングツールで十分だけどな。
483 :デフォルトの名無しさん2011/06/26(日) 03:31:52.87
>>476
> 直接いじる事はできないんだ。だから、変更したい箇所にAdapterやらBridgeを噛ませて動作を整えるしかないんだ。

そのAdapterやらBridgeを半自動で
作成してくれるんだよ。Eclipse+Javaは。

これはリファクタリングではないが、静的言語ならではの
コンパイラのコード理解力
485 :デフォルトの名無しさん2011/06/26(日) 03:34:46.17
>>483
別に、静的がいいだの、動的がいいだの俺は書いてないんだけどな。
481 :デフォルトの名無しさん2011/06/26(日) 03:29:28.07
リファクタリングとは人間がやるものだ。
機械にやらせるもんじゃない。



アセンブラも同じだ。
ハンドアセンブル最高!
484 :デフォルトの名無しさん2011/06/26(日) 03:33:00.22
要は使ったこともないのにはったりで騙ってるってことだね
491 :デフォルトの名無しさん2011/06/26(日) 03:42:32.18
>>484
Java + Eclipseしか使ったことは無いの?
3Dデータ変換から、音声生成、マルチメディアとWebシステムとの接続とか
そういう環境じゃ、言語がどうの環境がどうのとか些細すぎてどうでもいい。
言語や環境にとらわれず、どの状況でも応用効かせられる方法をもたなきゃやってられん。
486 :uy ◆KOAgYBL/Xg 2011/06/26(日) 03:35:20.97
だから、大規模なプログラムの静的言語って

A構造体の引数をとって、A構造体を返す。 みたいな関数が多くなってくるとおもうんだけど
あれって結局、型をなくしたいんだよ
仕様変更に強くする為には、そうするしかない
第一引数にint 第二引数にstring 第三引数に... っていう感じじゃなくて

構造体.int =5
構造体.string ="aa

function( 構造体 ) ;

こう。


あと、Rubyだとハッシュ引数というのがあって
function({ :int => 5 , :string => "aa" })
こういうのをやってる

こういう手法が、良いとされるって事は、もう結論出ちゃってるじゃん・・・、
動的言語はこの手のことをすべての箇所でやれるが、
静的言語は、ライブラリやロジックのすべての箇所でやるのは無謀
結局、普通にfunction( 1, "aa" , :test ); ってな具合に引数を渡してる関数も出てくるわけで

 そ こ が リファクタリングの為に要する時間を増やすことになる
488 :デフォルトの名無しさん2011/06/26(日) 03:37:36.77
> A構造体の引数をとって、A構造体を返す。 みたいな関数が多くなってくるとおもうんだけど
> あれって結局、型をなくしたいんだよ

いや、単に「引数オブジェクトの導入」という
リファクタリングを実践しているだけ。
492 :uy ◆KOAgYBL/Xg 2011/06/26(日) 03:42:43.12
>>488
何同じこといってんの?
たとえばRuby処理系にしてみれば VALUEって構造体がそれにあたる
静的言語だから、ああいういろんな場所で使う共通の構造体を作る( しかない。 )
動的言語だと、そのVALUEの定義すら省く

あとそんな当たり前のやり方にたいし「引数オブジェクトの導入」 とかリファクタリングとかいわれてもこまるwwwwww
あの程度、最初の設計段階でかけていなければならないものであって、リファクタリングしてない
490 :デフォルトの名無しさん2011/06/26(日) 03:41:54.77
> だからねぇ・・・リファクタリングって、個人の能力が如実に表れるものであって、

個人の能力が現れないものがあったら教えてくれ(大爆笑w

495 :uy ◆KOAgYBL/Xg 2011/06/26(日) 03:49:05.31
>>490
如実の意味でもググってきたら?
文章よめないのか? あー日本語よめねーのか、なるほどな
日本語コンプレックスのせいで英語俺よめるぜ(キリ)みたいになってんだ(笑)

個人の能力があらわれないもの
そりゃ、おまえが普段かいてるコードそのものだよwwwwwwwwwwwwwwwwwwwwww
土方のかいてるソースコードに「 個人の能力 」なんて誤差の範囲なんだけどwwwwwwwwwwwwww
何かを勘違いしちゃっていたの???
498 :デフォルトの名無しさん2011/06/26(日) 03:54:30.30
>>495
> 個人の能力があらわれないもの
> そりゃ、おまえが普段かいてるコードそのものだよwwwwwwwwwwwwwwwwwwwwww

コードこそ、個人の能力が一番現れるもんだろ。

その証拠にさっきお前もソースコード要求していただろ。
個人の能力がどうとかいって。
499 :uy ◆KOAgYBL/Xg 2011/06/26(日) 03:56:05.70
>>496
ハッァアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwww?Wwwwwww
おまえ、マジでど素人だろ
プログラミングさえ満足にできない奴って生きてて恥ずかしくないの?????????ww


>>498
はぁあ??????
??WwW?W
俺が要求していたのはそのコードじゃないのでwwwwwさっきから脳内妄想激しすぎwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
501 :デフォルトの名無しさん2011/06/26(日) 03:57:18.14
>>497
というか>>499を見る限り、精神薄弱を演出して逃げに入りましたな。
494 :デフォルトの名無しさん2011/06/26(日) 03:44:59.39
やっぱりな。

リファクタリングを分かってない。

本当にすごい物ってのは、
基本なんだよ。なんでもそうだ。
502 :デフォルトの名無しさん2011/06/26(日) 03:57:24.76
こんなん書いてるアホだもん。リファクタリング以前だよ。

840 名前:uy ◆yyC0rYWEq2 []: 2011/06/18(土) 01:14:50.32
>>832
シーン介した場所ではup.up.up.なんて流石にやらない もっと細かい場所の事を言ってた
俺はシーンとゲーム内オブジェクトもいろいろと繋がってるから

こんな感じ
player_shot.sym # => :player_shot_002 ← 沢山作られるから適当な番号
player_shot.up.sym # => :player
player_shot.up.up.sym # => :scene_name

player_shot.x でプレイヤーショットのx座標
player_shot.up.x でプレイヤーのx座標取得
player_shot.up.up.hensuu で、シーンの共通変数、みたいな

勿論さっきかいたように.upを生で使ってたのは初期だけな

まぁこれは、プレイヤーショットの処理のところをかいてるときの、相対関係で、

シーンのところからプレイヤーショットのxを取得する例をかいていみると、、こうなる
scene.task[:player].search_down_all(/(player_shot_\d*)/).each do | key , value |
  value.x # => プレイヤーショットのx座標げっと
end
search_down_all関数っていうのは、自分の持ってるタスク以下の正規表現にマッチするシンボルのタスクを全部検索する感じの関数
505 :デフォルトの名無しさん2011/06/26(日) 04:03:06.19
>>502
うむ。

コードは一番能力の差が出るところだな。
506 :デフォルトの名無しさん2011/06/26(日) 04:07:21.10
>>502
 てか、静的動的云々語る前に、オプソのコード眺めるなりして、
コードの書き方勉強すべきじゃね?一部だけ観て全体を見れてないだろ。
507 :uy ◆KOAgYBL/Xg 2011/06/26(日) 04:07:52.65
>>502
それをだしてきたかww もっと貼っていいよそれ

わかる奴にはわかるソースコードのはずだから どんどん貼れ?


>>わかる奴へ
それをみてわかるように、俺はもうリファクタリングがどうのってフィールドにはいない
少し戯れをしているだけ
509 :デフォルトの名無しさん2011/06/26(日) 04:13:00.22
>>507
自分からリファクタリングの話を振っておいて、気がついたら
自ら異次元に旅立ちおったwwwww

ではわかる奴の点呼をとろう。
uy ◆yyC0rYWEq2さんの理解者は挙手だ!
504 :デフォルトの名無しさん2011/06/26(日) 04:01:28.92
趣味グラマにはリファクタリングなんて縁がないからね。
全ソースコードは常に修正可能だし
もてる時間を全部つぎ込んで一から書き直してもモーマンタイw
508 :デフォルトの名無しさん2011/06/26(日) 04:11:32.48
みんな分かってる。

基地外が誰かを。

文句を言ったやつだ。
512 :uy ◆KOAgYBL/Xg 2011/06/26(日) 04:26:40.42
object.search_up(/(window_\d*)/).search_down_all(/(window_.*)/).each do | key , value |

object.search_up(/(window_\d*)/).up.delete

異次元だよ、 
こんな感じに、何やってるかわかんないと思うし
どうせ嫁やしねーんだろ、 
ちょっともう、リファクタラとかそういう場所にはいませんね  こういうコードおまえたちは書いてるの?かいていないんでしょ
はいはいしゅうりょしゅうりょう


object.window_template2({ sym: :test_win ,
 window:({ default:({ x: x , y: y , sym: :window , d: Image.new( w , h , [100,100,100] ) ,
  window:({ text:({ x: x + 10 , y: y +10 , sym: :window_text , d: Image.new( w - 20 , h - 20 , [10,20,20] ) , }) ,
   state: ({ x: x , y: y + h - 20 , sym: :window_state, d: Image.new( w , 20 , [80,120,180] ) , }) ,
   title: ({ x: x , y: y , sym: :window_title, d: Image.new( w , 20 , [80,170,180] ) ,
    window:({ close: ({ x: x -20 + w , y: y , sym: :window_title_close , d: Image.new( 20 , 20 , [180,220,180] ) , }) ,
     max:  ({ x: x -40 + w , y: y , sym: :window_title_max , d: Image.new( 20 , 20 , [220,220,180] ) , }) ,
     }) ,
    }) ,
   }) ,
  }) ,
 }) ,
})
514 :デフォルトの名無しさん2011/06/26(日) 04:32:37.60
>>512
変数を減らすためにあらゆるものを再帰とサーチで済ましていて
そのせいで処理速度がちょっとRubyではきつくなってきてる
518 :デフォルトの名無しさん2011/06/26(日) 04:42:16.75
俺はRubyの読み書きが出来るが>>512の例は正直単に読みにくいという
以上の感想が持てん。
集合操作のメソッドチェインとUIか何かの宣言的記述など珍しくもない。

誰か見所を教えてくれ。
519 :デフォルトの名無しさん2011/06/26(日) 04:43:38.30
>>512
uyさんぱねぇっす
まじ読めねぇっす
たしかに異次元な感じっす
520 :uy ◆KOAgYBL/Xg 2011/06/26(日) 04:45:10.88
>>514
半分は、正解。

けど変数のサーチによって速度は遅くなるのは毎回サーチする意味ないから、やろうと思えば回避可能
ソースコードの見た目的な問題で、毎回サーチするようにかいてるけど、たかが知れてる誤差

つうか闇ブログ見つけたのか
もう放置してるけど
521 :デフォルトの名無しさん2011/06/26(日) 04:47:14.94
>>520
お前が馬鹿だという証明になってしまったなw
522 :デフォルトの名無しさん2011/06/26(日) 04:47:38.13
>>512
なんでシンボルにしてんの?
シンボルと同じ名前の変数に束縛しても同じじゃん。
しかも変数のほうが速いだろ。
削除したいからか?
524 :デフォルトの名無しさん2011/06/26(日) 05:10:50.72
>>521
Rubyを使わない俺にその点を分かりやすく解説してくれると嬉しい。
525 :デフォルトの名無しさん2011/06/26(日) 05:25:23.52
>>524
あ、うん。俺もわからない。
526 :uy ◆KOAgYBL/Xg 2011/06/26(日) 05:29:07.11
>>516
同じ種類のクラスオブジェクトだけど、別変数、
↓ window_template2やったobject
object.task.each do | key , object |
 object ← search_upやってるobject
end

>>522
殆どのアルゴリズムは漏れは変数名を意識しなくてもかいていけるので、変数宣言をする意味がない



>>524
やめろ
531 :デフォルトの名無しさん2011/06/26(日) 05:58:37.58
>>526
>同じ種類のクラスオブジェクトだけど、別変数、
>↓ window_template2やったobject
>object.task.each do | key , object |
> object ← search_upやってるobject
>end

意味が解からん。インスタンス的に別だと言いたいのか?
それともインスタンスを束縛している変数だけ違うといいたいのか?
あと、今の情報だけじゃobject.search_upを実行してる時、objectのselfをyeildに引渡してるように
渡してるようにしか見えん。
533 :uy ◆KOAgYBL/Xg 2011/06/26(日) 06:39:29.29
>>531
そう、別インスタンス。hash値が別物。って意味
どうせ理解できんて

今説明してるとこって、漏れの設計の中ではまだ簡単な範囲だぞ
あと一般的じゃない概念を2つは説明しないと全体像すら伝えきれない

ひとつわかったことは
根幹が一般的じゃない作り方してると、その上に乗っかる概念も全然別物にしていかないと
効率が出ないって事、

まずevalも大量に使ってるし、根幹にあるそのobjectのクラスはOpenStructと同じようにハッシュからメンバ変数作る感じだし
そのオブジェクトに必要なメソッドは生成してからmoduleをextendしていく感じ、
なおかつ、そのmoduleは extendedとdefine_singleton_methodと各メソッドも内部でOpenStructとlambda使って
かなりえぐい事もやってるし説明しきれる気がしない
ようは、すべてのオブジェクトの為に、毎回、必要なメソッドを「生成」し、メソッド内部の状態変数にも外部からアクセス出来るように
させる為のdefine_singleton_method つまり特異メソッドなんだけど、
これはRubyだとクラスで多重継承できないって限界があるから、クラスのかわりにmodule、initializeの代わりにextended使ってるだけ
正直、最初は関数型プログラミングの派生だったはずなんだけどその面影もなく、

まずRubyとlambdaに熟知していないと全体像すら見えないのに、相手のレベルすらわからず説明とか、
どのレベルからやっていいか不明だし
無駄

ただひとつ、この事実を伝えるならば、俺がこの手法を開発したことでOOを完全にプギャー出来るようになったって事実

参考になりそうな資料
http://www.youtube.com/watch?v=tf1RxvHWH5c
http://blog-imgs-23.fc2.com/k/a/i/kai1993/20080727184304.jpg
515 :デフォルトの名無しさん2011/06/26(日) 04:34:50.47
安全って何?

メモリ安全?
型安全?
モジュラリティ?
仕様に準拠しているかどうか?
517 :デフォルトの名無しさん2011/06/26(日) 04:38:23.76
>>515
やっぱり動的言語では安全なソフトは作れない
http://hibari.2ch.net/test/read.cgi/tech/1306002146/1

1 名前:デフォルトの名無しさん[sage] 投稿日:2011/05/22(日) 03:22:26.61
型をしっかり明記してこそ
安全で堅牢、バグのないソフトは作れる
523 :デフォルトの名無しさん2011/06/26(日) 04:47:57.67
>>517
バグのなさが安全だっていうならCoqあたりで証明するしかないんじゃないか?
516 :デフォルトの名無しさん2011/06/26(日) 04:35:50.29
object.search_upとobject.window_template2のobjectって同じものか?
527 :デフォルトの名無しさん2011/06/26(日) 05:31:04.87
とりあえず、うゆはNGでおk
Rubyスレでもあんまり相手にされてないから放置しといて
529 :uy ◆KOAgYBL/Xg 2011/06/26(日) 05:42:06.13
>>527
ハァアA???
Rubyスレで誰よりも良質で速い回答しているのはどこのどなた様ですかァ????????
夢に飽きたらRubyスレにおいで^^^^^^^^^^^^^^^^^^^^^^^^^^^^
528 :uy ◆KOAgYBL/Xg 2011/06/26(日) 05:31:27.26
たかがほんのわずかにソース晒した程度で
こんなに興味もたれるってなんなの?wwww
普段バカにしてるくせに
やっぱりuyの実力を心のどこかでは認めていましたtってこと????
530 :デフォルトの名無しさん2011/06/26(日) 05:53:00.75
> Rubyスレで誰よりも良質で速い回答しているのはどこのどなた様ですかァ????????

ん? 俺のことだが?
532 :デフォルトの名無しさん2011/06/26(日) 06:04:54.87
Ruby初心者スレの誰かさんは回答速いだけで質としては最悪の部類だからな…
535 :デフォルトの名無しさん2011/06/26(日) 06:54:56.95
あー、あれだ。

初心者ってのは回りくどいことをして
ドヤ顔するよね。無駄なことやってるだけなのに。
537 :デフォルトの名無しさん2011/06/26(日) 07:39:15.22
えぐいやり方ってのはそれに見合った結果が伴って初めて正当化される
のであって、成果物も示さずにえぐいだけではただのオナニー。

まぁ書かれている範囲では単に壮大な車輪の再発明をしているだけの
ようにしか思えんが。
538 :デフォルトの名無しさん2011/06/26(日) 07:58:55.42
何を使っているのか道具立てばかり説明して何をやっているのかを説明しない
人間は大抵自分自身何をやっているのか理解出来ていないか、説明に値しない
事しか出来ていないというのが典型的なパターンだな。

プログラミングに限らないよ。写真とかスポーツとか、道具が必要な事柄では
大抵このパターンが観測される。
544 :デフォルトの名無しさん2011/06/26(日) 09:54:57.24
>>538
手段があっても目的がないからね。
手段を目的化するか目的をでっち上げるしかない。
539 :デフォルトの名無しさん2011/06/26(日) 08:31:52.54
俺の見る限りでは、そのように言うだけの奴がいちばんたくさん観測される
540 :uy ◆KOAgYBL/Xg 2011/06/26(日) 08:48:04.31
なんだかんだで公開する、自分のアホさに泣けてくる
http://www.geocities.jp/c_zelos/soto/mikomiu2011_06_26_00_07_32.zip

これはuy様だから、書けてるだけ 一般人にこれを書けとは言わない
質問は受け付けねーよ
今回のは、もう根幹部分は完璧になってるから、
もう書き換えることは、ない
ソースコードがすべて

真理について少しだけ語ると、このソースは完璧を目指したソースコードで
オブジェクト指向とかは、非完璧ながらも、それを制御することを目指したソースコードになるんだよ
俺は、非完璧でかいていくほうが最終的には良い、って所までわかった上でこれをやってる
別に誰かがこっち側に来るのも良いけど、多分俺の今かいてるこれが限界点だから、これ以上の進化は無いし
それと対照的に、非完璧 ながらもそれを制御することを目指していくと、限界点が無く、無限に進化し続ける事が可能なんよ
けどまだ見ぬ概念、 擬似完璧というものがあると思う。 その擬似完璧を発見する為には、
非完璧方面が成長するだけじゃ足りず、完璧側も成長させた上で、その集大成を組み合わせることで完成する
俺が死ぬ前に擬似完璧の概念が、自分で発見出来るかも怪しいし、間違っても世界にそれが広まる様子を見れる事はないな・・
完璧なソースコードが広まるのは20年後、 さらなる上、擬似完璧が出来上がるのは100年後といったところ


せっかくのソースもこんな場所に公開しちゃったし


もうゼロの使い魔4期に期待しつつ消えるとする・・・・・・・・


543 :デフォルトの名無しさん2011/06/26(日) 09:25:02.09
p "真理について少しだけ語ると、このソースは完璧を目指したソースコードで
オブジェクト指向とかは、非完璧ながらも、それを制御することを目指したソースコードになるんだよ
俺は、非完璧でかいていくほうが最終的には良い、って所までわかった上でこれをやってる
別に誰かがこっち側に来るのも良いけど、多分俺の今かいてるこれが限界点だから、これ以上の進化は無いし
それと対照的に、非完璧 ながらもそれを制御することを目指していくと、限界点が無く、無限に進化し続ける事が可能なんよ
けどまだ見ぬ概念、 擬似完璧というものがあると思う。 その擬似完璧を発見する為には、
非完璧方面が成長するだけじゃ足りず、完璧側も成長させた上で、その集大成を組み合わせることで完成する
俺が死ぬ前に擬似完璧の概念が、自分で発見出来るかも怪しいし、間違っても世界にそれが広まる様子を見れる事はないな・・
完璧なソースコードが広まるのは20年後、 さらなる上、擬似完璧が出来上がるのは100年後といったところ".scan(/完璧/).size
545 :デフォルトの名無しさん2011/06/26(日) 10:48:29.00
一晩でスレすげー進んでて笑えるwww

結局、テストは静的/動的言語の両方でするってことでいいの?

個人的な経験としては、テスト書けば「わざわざ型検査に関するテストを書かなくても」
型エラーは見つかると思ってるんだが、静的言語派はそうは考えないってことだよね?
なんでそう思うんだろう?
551 :デフォルトの名無しさん2011/06/26(日) 11:26:42.75
静的厨はテストやらないから、
「コンパイル時にチェックされないこと = 本番までチェックされないこと」
になるんだよね?そうだよね?
552 :デフォルトの名無しさん2011/06/26(日) 11:33:34.13
そうだよ。

動的厨はテスト完全にやれば大丈夫と言うんだろうけど、
でかいシステムでは、至難の業。

そう言う現実を見てない/知らないから、動的厨でいられ
るんだろうけど。
555 :デフォルトの名無しさん2011/06/26(日) 11:39:49.72
>>552
あなたの現実 = 土方ですよねーwww
556 :デフォルトの名無しさん2011/06/26(日) 11:47:49.46
>>553
> 現実って言葉を多用する奴ほど、そいつの脳内設定のことである確率が高い

それこそでかいシステムに携わったことないやつの脳内イメージだと思うが。

>>554
> 静的言語であっても十分にテストされてないコードは安全とは言いかねる

それは事実だが、静的言語であればコンパイル時に型の不整合はチェック
されてるから、少なくともそこに起因するバグだけは少なくなる。

>>555
土方かどうかかかわらず、現実だからな。
脳内で作った気になるならいいんだろうけど。(w
559 :デフォルトの名無しさん2011/06/26(日) 11:59:45.83
>>556
つまり動的言語でもテスト書けば安全ってことと、
静的言語でもテスト書かないと安全じゃないってことは認めるのか?
562 :デフォルトの名無しさん2011/06/26(日) 12:03:40.93
>>556
>それは事実だが、静的言語であればコンパイル時に型の不整合はチェック
>されてるから、少なくともそこに起因するバグだけは少なくなる。

逆に言えば動的言語はコードの汎用性を高めるために
静的言語では機械がチェックしていることをわざわざ人間にやらせているということになるのかな。
プログラマの負担が増えるのでは本末転倒のような気もする。
563 :デフォルトの名無しさん2011/06/26(日) 12:05:29.69
>>562
お前は型付けの強い弱いと静的動的を混同してる
564 :デフォルトの名無しさん2011/06/26(日) 12:08:31.66
>>562
テストが実行されれば型は実行時に機械的にチェックされる
どうせテストは書くんだから、プログラマの負担は増えてないよ?
568 :デフォルトの名無しさん2011/06/26(日) 12:14:46.46
>>559
> つまり動的言語でもテスト書けば安全ってことと、
> 静的言語でもテスト書かないと安全じゃないってことは認めるのか?

そりゃそうだろ。

ただ、問題は完全なテストを書けるかだ。

>>562
> 静的言語では機械がチェックしていることをわざわざ人間にやらせて
> いるということになるのかな。

単に静的はコンパイル時に、動的は実行時にチェックしてるだけのこと。
ただ、コンパイル時にチェックするためにそれ相応の情報が必要なので、
ちょっとコードを書くのが面倒だったする。
572 :デフォルトの名無しさん2011/06/26(日) 12:34:37.94
>>563
そう言われてみればそのとおり。
587 :デフォルトの名無しさん2011/06/26(日) 15:42:10.09
>>586
>>563
553 :デフォルトの名無しさん2011/06/26(日) 11:35:01.73
現実って言葉を多用する奴ほど、そいつの脳内設定のことである確率が高い
554 :デフォルトの名無しさん2011/06/26(日) 11:37:51.52
型付けの強い/弱いと、静的/動的は直交する概念
強い動的型付け言語の場合、実行時に自動的に型の整合性はチェックされる

だからテストを書いてれば、わざわざ型チェック用コードを入れなくても
型エラーは調べられる

ま、それもこれもカバレッジが十分高い場合だけなのは事実だが、
静的言語であっても十分にテストされてないコードは
安全とは言いかねる
589 :デフォルトの名無しさん2011/06/26(日) 15:44:34.56
なにが「動的言語は、テストを書かないってことでいいね?」だよ
頭おかしいんじゃないの?www
>>554でも読んどけ
594 :デフォルトの名無しさん2011/06/26(日) 15:57:26.52
>>589
動的型言語では型チェックを一々テストでも書かないよ。
557 :デフォルトの名無しさん2011/06/26(日) 11:50:20.88
プログラマの仕事を刺身パックを作る作業工程で例えると

・C/C++ PG    : 魚を捕ってくる人
・動的言語 PG : 魚を捌いて刺身にする人
・Java 土方   : 刺身にタンポポ乗せる人 

仕事が違えば必要とされる道具(言語)も違う
558 :デフォルトの名無しさん2011/06/26(日) 11:54:00.52
>>557
あれはタンポポじゃなくて、食用菊だぞ。
560 :デフォルトの名無しさん2011/06/26(日) 12:00:57.88
>>557
>・動的言語 PG : 魚を捌いて刺身にする人

なんか適当に切り刻んだ刺身が出てくる店の話?
561 :デフォルトの名無しさん2011/06/26(日) 12:03:07.57
脳味噌の知識が適当に切り刻まれてる人の反応
569 :デフォルトの名無しさん2011/06/26(日) 12:17:10.35
>>561
脳味噌の知識がないやつは気楽でいいねぇ (w
565 :デフォルトの名無しさん2011/06/26(日) 12:08:33.70
閃いた!まず「安全なソフト」とは何かを定義しようぜ。そうすれば、このスレから
無駄な煽りが消えるんじゃね?
567 :デフォルトの名無しさん2011/06/26(日) 12:13:21.51
でも実行時エラーは当然ながらコンパイル時には拾ってくれないんでしょ?がっかりです(棒
570 :デフォルトの名無しさん2011/06/26(日) 12:18:26.28
例えば、不等式を満たせば実数型であることも自動的に確定するみたいに
値のテストは型のテストを兼ねる

型のテストが必要になるのは、型さえ合えばどんな値でも構わない場合に限られる
595 :デフォルトの名無しさん2011/06/26(日) 16:02:01.65
>>592
>>437の
> プログラムの性質を確認するために普通なら必要だった単体テストの数を減らしてくれる

ってのは嘘だと思う

だって実行したら機械的に型チェックも行われるんだよ?
>>570のいうように値をテストしたら型チェックも兼ねるんだよ?
また関数の引数の数も機械的にチェックされるよ?
つまり、最低限のまともなテストを実行したら型チェックは行われるんだよ

まあ、最低限のテストさえしないなら型チェックは行われないが、
そんなプログラムは安全ではない
571 :デフォルトの名無しさん2011/06/26(日) 12:21:22.54
もちろん、値なんてどんな値でも構いませんよ
コンパイル時にチェック出来ないものは全部仕様ですwww
573 :デフォルトの名無しさん2011/06/26(日) 14:07:46.53
全てのバグをコンパイラが見つけてくれるわけじゃないんだから
動的でいいじゃん。俺があらゆるテスト書くから。

こんな奴信用するか。
577 :デフォルトの名無しさん2011/06/26(日) 15:08:54.77
>>573
俺はテスト書かないから、テスト書くって言ってる奴は信じられん
そういうことですね?
581 :デフォルトの名無しさん2011/06/26(日) 15:34:27.01
>>573
まさにこんな奴らが釣れててワロタ
578 :デフォルトの名無しさん2011/06/26(日) 15:25:46.06
静的言語はコンパイラが型検査してくれるから
テストしなくても安全なんですよ。

こんな奴信用するか。
579 :デフォルトの名無しさん2011/06/26(日) 15:28:24.17
>>578
>静的言語はコンパイラが型検査してくれるから
>テストしなくても安全なんですよ。
>こんな奴信用するか。

誰も言ってもいないような話を持ち出す奴も信用ならんだろう。
582 :デフォルトの名無しさん2011/06/26(日) 15:36:38.52
テスト書かない土方仕事してるのは俺だけであってくれ!って
心の叫びが聞こえるスレ
583 :デフォルトの名無しさん2011/06/26(日) 15:38:33.74
テスト書くってことにしたら
動的言語でも安全なソフトが組めるってことで
話が終わっちゃうじゃん
585 :デフォルトの名無しさん2011/06/26(日) 15:39:56.38
>>584
>>583
588 :デフォルトの名無しさん2011/06/26(日) 15:43:49.15
>>583
> テスト書くってことにしたら

> 動的型言語では型チェックを一々テストでも書かないよ。
> 動的型言語では型チェックを一々テストでも書かないよ。
> 動的型言語では型チェックを一々テストでも書かないよ。

読みましたか?

テストは書かないのです。
584 :デフォルトの名無しさん2011/06/26(日) 15:38:43.04
なんで静的に型チェックするといったら
テストはしないってことなんだって
勘違いするのか理解できん。

どうしてそう思ったのか、
そこを説明してくれないか?
586 :デフォルトの名無しさん2011/06/26(日) 15:41:04.41
>583
今言ってるのは、型チェックのテストのことだよ。

静的言語では、コード書いているうちに自動的に行える型チェックのテストを
動的言語では手動で書くということでいいのか?
上の方で、型チェックのテストは書かないと
言っていたはずだが。

動的言語は、テストを書かないってことでいいね?
591 :デフォルトの名無しさん2011/06/26(日) 15:50:13.40
最初からそれができないバカの隔離スレとして立ったスレで何をいまさらw
593 :デフォルトの名無しさん2011/06/26(日) 15:56:46.68
つーかさ、静的言語にとって、型が違うとか
引数の順番や数が違うとかそういうのは

ケアレスミス なんだよ?

コンパイラが教えてくれるもの。

それを、自分でテストかコード書いて
自分で調べるって、無駄だろ。
ケアレスのためにどれだけ苦労してるんだよ。
596 :デフォルトの名無しさん2011/06/26(日) 16:03:27.23
> だって実行したら機械的に型チェックも行われるんだよ?

実行しなかったら?
たとえ実行したとしても
エラーになるデータを使わなかったら?
598 :デフォルトの名無しさん2011/06/26(日) 16:06:44.24
>>596
そんなもんアウトに決まってる
でも、その場合は静的言語でも型検査通ってるだけで
値のチェックも何も通ってないんだから
安全とはいいかねる
599 :デフォルトの名無しさん2011/06/26(日) 16:10:53.35
結局こんなとこでグダグダ言っててもなぁ

日本の土方が書くJavaプログラムよりは
Amazonのプログラマが書くPerlの方が安全だろうし、
結局は書き手の能力に依存しすぎる

俺は日本の土方に書かせるなら絶対に静的言語一択だけど
609 :デフォルトの名無しさん2011/06/26(日) 16:22:34.50
>>599
同意
616 :デフォルトの名無しさん2011/06/26(日) 16:50:50.92
結局>>599でFAだろ
600 :デフォルトの名無しさん2011/06/26(日) 16:11:41.54
安全か、安全でないか、0と1で考えるからダメなんだよね。

安全ってのは0から100%まである。
で、漏れや時間がなくて手抜きしたとき、そのパーセンテージは下がる。

テストを完璧にやれば100%だが、
テストの組み合わせの数を考えると、IFが10個あるだけで
テストパターンは1024個にもなる。

そこから考えると、実行時に手動でテストコードを書くよりも
実行前にコンパイラを使うことで自動的にテストするほうが良い。
自動テストなら組み合わせがいくつあっても、テストは1つですむ。

そうやって節約できた時間で、テストコードを書く。
そうして安全度を高めるのだ。
601 :デフォルトの名無しさん2011/06/26(日) 16:16:42.33
まあ動的言語のほうがテストも書き易いんだけどね

安全かどうかが程度問題というなら、
動的言語で十分にテスト書かれてるなら型検査も十分にテストされてる
静的言語はテスト書かなくても100%型検査はテストされてるが
十分にテスト書かないと結局は安全とは言い難い
618 :デフォルトの名無しさん2011/06/26(日) 17:26:03.29
>>610
>assertEquals(1, 2);

それのどこが、

 >>601
 > まあ動的言語のほうがテストも書き易いんだけどね

を示すことになるんだ?
638 :デフォルトの名無しさん2011/06/26(日) 19:54:32.43
>>601
静的言語だからってなんでテストコードを静的言語で書かないといけないの?
602 :デフォルトの名無しさん2011/06/26(日) 16:17:19.86
動的言語厨は基本的に
「理論的には」で語ってるよね。

現実を知らないのでは?
604 :デフォルトの名無しさん2011/06/26(日) 16:19:27.89
>>602
現実の話をしたら、テスト後に型エラーなんて見ないからさ
なに型検査にばかり拘ってるのか不思議
603 :デフォルトの名無しさん2011/06/26(日) 16:17:33.57
> まあ動的言語のほうがテストも書き易いんだけどね

それはない。
606 :デフォルトの名無しさん2011/06/26(日) 16:19:45.39
>>603
じゃあテスト書いてみてよ
610 :デフォルトの名無しさん2011/06/26(日) 16:23:23.50
>>606
assertEquals(1, 2);

619 :デフォルトの名無しさん2011/06/26(日) 17:34:14.73
>>618
何言ってんだ?それは

動的言語の方がテスト書き易い(>>601)
=> それはない(>>603)
=> じゃあ書いてみろ(>>606)

って言われて、静的厨が頑張って書いたテストコード(笑)じゃん
620 :デフォルトの名無しさん2011/06/26(日) 17:38:01.02
>>619
おお、そうか、素で間違ってたよ。

なら、動的ならこれより書き易いんだな。
動的のテストコードフリーズ。
626 :デフォルトの名無しさん2011/06/26(日) 17:47:59.46
それは>>610のことか?
605 :デフォルトの名無しさん2011/06/26(日) 16:19:33.80
動的言語はテストの必要がないほど
小規模のプロジェクトでしか使われないんだろ
607 :デフォルトの名無しさん2011/06/26(日) 16:21:26.44
> テスト後に型エラーなんて見ないからさ

それはテストが完璧な場合の話。

世の中に完璧なテストが行われている
プロジェクトがあるのか?
テストが完璧ならバグもないはずだが。


結局、人間ががんばらないといけないものは完璧にはならない。
だから機械(コンパイラ)にさせるんじゃないか。
611 :デフォルトの名無しさん2011/06/26(日) 16:36:12.77
>>607
完璧じゃないなら安全じゃないなら
この世に安全なプログラムは存在しないな
テスト項目は型検査だけじゃないからな
612 :デフォルトの名無しさん2011/06/26(日) 16:38:33.90
プログラムの安全さ

静的言語withテスト >= 動的言語withテスト >>>>>>>> 静的言語 >>>> 動的言語 >> ∞ >> Java土方のプログラム

理論的には静的言語の方が安全
613 :デフォルトの名無しさん2011/06/26(日) 16:40:48.23
どっちも安全じゃ無いなら、動くプログラムが速い方が良い
614 :デフォルトの名無しさん2011/06/26(日) 16:44:20.99
>>611 >>613
ほらねw やっぱり動的厨は
安全を0か1で語ってる。
さっき書いたとおりでしょ?
615 :デフォルトの名無しさん2011/06/26(日) 16:46:45.46
>>614
型検査を0か1かで語ってるのはお前
617 :デフォルトの名無しさん2011/06/26(日) 17:12:17.27
>>614
>>613はどう見ても静的言語の事だろ
621 :デフォルトの名無しさん2011/06/26(日) 17:39:12.41
つーか、そこはまともなテストコードを提供できない
静的厨を笑うところ
普段からテスト書いてねーのかよ
633 :デフォルトの名無しさん2011/06/26(日) 18:25:21.80
>>621
>つーか、そこはまともなテストコードを提供できない
>静的厨を笑うところ
>普段からテスト書いてねーのかよ

いや、どう考えても

> まあ動的言語のほうがテストも書き易いんだけどね

なんてこと言ってる奴のターンだろ。
623 :デフォルトの名無しさん2011/06/26(日) 17:43:50.79
言い訳がましいな。

なんでテストコード書いてみろと言われて
書かずにそんなレスをするのか?
625 :デフォルトの名無しさん2011/06/26(日) 17:45:48.49
>>623
だってもう動的言語のテストの例は出てるじゃん
627 :デフォルトの名無しさん2011/06/26(日) 17:49:49.41
610はJavaでしょ?

それを動的言語で書いたら
どうなるかなーってのが今の話の流れ
630 :デフォルトの名無しさん2011/06/26(日) 18:00:32.73
Javaしらないけど、こんな感じじゃねーの?
セミコロンとかダブルクォーテーションとか
どうでもいいところは手抜きして書いた。

@Test(expected=ValidationError.class)
public void footest(a,b,c) {
  foo(a, b, c);
}
public void test() {
  foo('a', 'b', '111')
  foo(0, 'b', '111')
  foo('a', 0, '111')
}
631 :デフォルトの名無しさん2011/06/26(日) 18:01:08.27
よくわからんがそれって型チェックが機能してるかのテストじゃないの?
静的言語では書かなくて良いたぐいのテストコードになるんじゃない?

foo関数でちゃんと値が追加されてるかテストしろとかならわかるけど…
632 :デフォルトの名無しさん2011/06/26(日) 18:12:33.42
>>631
つまりfoo()がhashを返すような関数の場合に変更して、

self.assertEqual(foo('a', 'b', '111')[0], '111')

的なコードを書けってことかい?
なんか本質的なつっこみじゃないなぁ
634 :デフォルトの名無しさん2011/06/26(日) 18:31:03.17
動的言語はテストのときにMockが作りやすいかもしれないね

from minimock import mock, restore
mock(module.bar)
...
restore()

しとけば、...では内部でbar()を呼んでるコードはモックに置き換えられるとか
635 :6342011/06/26(日) 18:34:52.19
mock('module.bar')の間違いだった

あと静的言語でも同じことできるのかも
637 :デフォルトの名無しさん2011/06/26(日) 18:50:28.27
なんかすっっげー。ずっと同じ話で600まで来てんのか。
平行線にしても凄すぎるわ。
もうちょい濃い議論してんのかと思ったのに。
スレ開いて損した。
639 :デフォルトの名無しさん2011/06/26(日) 20:18:29.94
>>637
そもそもスレタイからどんどん脱線するからなこのスレ
その上コテが住み着いてちゃ纏まるはずがない
641 :デフォルトの名無しさん2011/06/26(日) 23:50:15.49
ユニットテストが正常に動作するなら
プログラムが正常に動作するなんて保障どこにもないし

別モジュールが未完成のハードウェアだったり
要求仕様自体が間違ってたりしたらどーするんだよ?
ユニットテストの目的は別な所にある
642 :デフォルトの名無しさん2011/06/26(日) 23:57:38.15
>>641
それをいうとプログラム停止問題と同じで100%保証は無理。

>別モジュールが未完成のハードウェアだったり
仕様が決まってるならスタブ使えばいいかと。
644 :デフォルトの名無しさん2011/06/27(月) 00:47:27.52
>>641
テストで安全は担保出来ないという話なら、同意。
あくまで誤りを検出して、修正するのが目的だから。
645 :デフォルトの名無しさん2011/06/27(月) 00:59:32.15
型による検証は網羅的で強力だが、
型の制約は実質的に必要な制約より強すぎるんだよな
そこで一種のトレードオフになってしまう
650 :デフォルトの名無しさん2011/06/27(月) 03:28:27.96
>>645
静的型の制約は弱すぎるからランタイムエラーがなくならない

あれだけ無駄に長々と書いてもまだ弱いから、
静的型に使う労力をテストに使った方がいいんじゃないかという話が出てくる
646 :デフォルトの名無しさん2011/06/27(月) 01:04:10.84
> 型の制約は実質的に必要な制約より強すぎるんだよな

どんな時に、その制約以上のことをしたくなるんだ?
647 :デフォルトの名無しさん2011/06/27(月) 02:04:16.19
型は制約というより宣言だろう。

今から○○の型を使います。
この引数は○○の型です。

宣言した後、○○の型といいましたけど、
違う型として使います。なんていうのは
そもそも設計が間違ってる証拠なんだよ。
648 :デフォルトの名無しさん2011/06/27(月) 02:40:31.65
645じゃないけど。
例えばJavaで既存のライブラリ使っててイライラするのはこういう辺り。
Javaでプログラム組む時の設計思想としてクラスの責務をなるべく狭くするよね。
結果として細かいクラスが沢山できる。特にバリュークラスなんかが。
Stringそのままを使うのではなく、Stringをフィールドに持つnichan.res.Nameクラスが作られたりする。
で、Stringのサブクラスではないので、Stringのメソッドは使えないし、Stringを仮引数に持つメソッドにも渡せない、getName()で参照する事しかできない。
クラス設計者が想定した範囲外のことをやろうとすると、とても面倒になる。
649 :デフォルトの名無しさん2011/06/27(月) 03:02:16.65
>>648
> getName()で参照する事しかできない

参照する以外に何をやりたいの?
getNameしか用意されていないのであればクラスの設計者が参照以外の
操作は安全ではないと言っているのだろう。

>Stringのメソッドは使えないし

getNameで取ってきた値には使えるだろう。

>Stringを仮引数に持つメソッドにも渡せない

getNameで取ってきた値は渡せるだろう。

何が困るの?
652 :デフォルトの名無しさん2011/06/27(月) 03:46:13.95
> 静的型の制約は弱すぎるからランタイムエラーがなくならない
なくすのが目的じゃなくて、減らすのが目的なんだよ。

ランタイムエラーは静的エラーと違って見つけるのが難しい。
だからなるべく減らすべきものなんだ。

静的エラーで分かるようなことを
ランタイムエラーにするのは
余計に労力がかかることになる。
653 :デフォルトの名無しさん2011/06/27(月) 04:18:30.28
Types Considered Harmful
http://www.cis.upenn.edu/~bcpierce/papers/harmful-mfps.pdf

既存の型システムの問題点について端的に
Benjamin C. Pierceつったら型の専門家のはずなので
まあ名無しよりは信用できるだろう

近い将来にはもっとまともな型システムが設計されて
動的の柔軟性と静的の検証・コード生成の効率化を
バランスさせることができるようになる……といいね
655 :デフォルトの名無しさん2011/06/27(月) 07:46:37.65
Java土方「動的が柔軟というけれど別に対して柔軟じゃないな。(キリ」
657 :デフォルトの名無しさん2011/06/27(月) 08:31:26.86
静的型付け信者ってクラスの設計者の思想を優先しすぎだろ
拡張メソッドとかバカ仕様すぎる
658 :デフォルトの名無しさん2011/06/27(月) 09:11:14.78
動的言語は柔軟すぎて大規模開発で使い難い。これは分かる
柔軟さに大差ないってのは、そいつが碌に動的言語を
知らないってことだからアホすぎる

「動的言語?型を省略出来るんでしょ?」程度の理解のJava土方らしいね
659 :デフォルトの名無しさん2011/06/27(月) 10:05:33.07
なにここ
具体的なレスしたら負けなの?
660 :デフォルトの名無しさん2011/06/27(月) 15:46:51.20
>>659
具体的なレスをどうぞどうぞ
662 :デフォルトの名無しさん2011/06/27(月) 20:57:04.10
Java土方にばーかばーかと
叫ぶスレだよ。

はいみんないっせいに
ばーかばーか、俺天才
664 :uy2011/06/28(火) 05:41:16.34
結局、動的言語の速度でもアプリケーション開発いけるようになったのが
本当につい最近だから
静的言語側よりも、プログラマーの総数も、ソースコードの総量も
全然まだ無いんだよ 実績も、ライブラリもな
時代遅れの静的厨なんてほうっておいて、つくっていけば良い

実際、型エラー(笑) 程度、
思ったんだけど実際に作っていく段階で殆ど取れてるわ
無駄に、型としてクラス作りまくらなければなwwwwwwwwwwwwwwwwww

このスレにいる静的厨の中に
「静的言語も動的言語も開発効率はかわらない(キリッ」
ってのを、マジで言ってそうやつもいるし、マジでレベルが低いんだと思う
665 :デフォルトの名無しさん2011/06/28(火) 06:14:13.89
>>664
ここはトイプログラムスレじゃないから
666 :デフォルトの名無しさん2011/06/28(火) 06:33:43.58
>>665
それに触っちゃ、めーっよ
670 :uy2011/06/28(火) 15:28:00.11
>>665
はぁ

そりゃ、君は動的言語が扱えないから?
トイプログラムしかつくれませーんって? いっちゃってるわけ?

自分からバカです  って自己申告してくる奴って多いよな・・・・・・・・・・・・・・・・・・・・・・・・・・
667 :デフォルトの名無しさん2011/06/28(火) 06:35:13.01
実績ないやつがいくら叫んでも認められないってことにいいかげん気づけよ
668 :デフォルトの名無しさん2011/06/28(火) 06:40:41.59
>>667
それはあれか?このスレ全体を皮肉ってるのか?w
669 :uy2011/06/28(火) 15:26:50.64


667 :デフォルトの名無しさん:2011/06/28(火) 06:35:13.01
実績ないやつがいくら叫んでも認められないってことにいいかげん気づけよ




だから実績を作れよって言ってんだろ おれは。w
674 :デフォルトの名無しさん2011/06/28(火) 21:28:52.33
とりあえず、土方と叩くことで
実績がないやつが満足するスレ。
676 :デフォルトの名無しさん2011/06/28(火) 21:50:23.50
馬鹿っていうやつが馬鹿なんだっていうのは
うまい言葉だよね。

結局自分が、○○と言われたら図星で嫌だと
思うから、そのことを他人に言うわけだよ。

本当は自分が○○なんだって自覚してるんだろうね。

あ、うん。土方の話ね。
677 :デフォルトの名無しさん2011/06/28(火) 22:26:53.85
世の中の評価基準は
学歴や資格よりも実務経験優先だからな

屁理屈野郎がドカタ以下のゴミって事はよくある
683 :デフォルトの名無しさん2011/06/29(水) 00:30:58.26
>>677
あるある
678 :デフォルトの名無しさん2011/06/28(火) 23:32:59.27
特にプログラミング業界はその気が強いね
基本的にどこも経験者募集だ
679 :デフォルトの名無しさん2011/06/28(火) 23:38:38.39
Java土方って俺には結構Java界を褒めてるように聞こえる
だって、フレームワークやらライブラリやらがすごく成熟してるから
土方作業のように何も考えずに作れちゃうんでしょ?
動的言語でもRoRとかはいい感じに土方させてくれるのかな?
680 :デフォルトの名無しさん2011/06/28(火) 23:57:58.89
Java土方ってなぜか使用しているプログラマーに言及してるだけだからね。
言語の話してるのに。
681 :デフォルトの名無しさん2011/06/29(水) 00:00:23.00
じゃあ今度からおまえらのことJava土方って呼ぶわ
リアルで
684 :デフォルトの名無しさん2011/06/29(水) 01:10:35.95
大規模開発ってのが一山いくらの土方を集めて
開発するってことならJava一択だと一貫して主張してるが、
これはJavaを褒めてるんだよ
素直に喜べば良いのに
689 :デフォルトの名無しさん2011/06/29(水) 02:26:32.18
俺は世界一の動的言語使い。

土方とは格が違うのだよ。
691 :デフォルトの名無しさん2011/06/29(水) 02:41:18.36
土方言語は仕事では使いたくないな。
そもそもドカが職になんかならないしw
695 :デフォルトの名無しさん2011/06/29(水) 10:24:35.81
どうもこのスレを見ていると大規模だから凄い、エライって風潮が見え隠れするような。
大規模大規模って、世の中フルスクラッチな大規模開発ばかりじゃないってのよ。
697 :uy ◆qq69ldDh7A 2011/06/29(水) 11:09:01.15
小物を沢山作って、集合させた大規模がこれからのプログラミングなんだよ ボケが
698 :デフォルトの名無しさん2011/06/29(水) 11:18:47.23
それは昔のUnixとかからそうだったんだけど、
C++やJavaあがりのプログラマには難しいみたいだ

マイクロソフト ワイヤレス ブルートラック マウス Arc Touch Mouse RVF-00006
マイクロソフト ワイヤレス ブルートラック マウス Arc Touch Mouse RVF-00006