やっぱり動的言語では安全なソフトは作れない 3
レス数が1000を超えています。これ以上書き込みはできません。
0001uy
2011/06/20(月) 01:06:27.48http://hibari.2ch.net/test/read.cgi/tech/1306571666/
0002デフォルトの名無しさん
2011/06/20(月) 01:09:01.530003デフォルトの名無しさん
2011/06/20(月) 01:11:41.95これからこのスレに書き込んだヤツは漏れ無く
大都会都民じゃけぇの。
0004デフォルトの名無しさん
2011/06/20(月) 01:26:26.73そこそこ自分できめちゃっていいとき → Scala
おれおれツール → groovy
0005デフォルトの名無しさん
2011/06/20(月) 01:34:19.340006デフォルトの名無しさん
2011/06/20(月) 01:39:24.430007デフォルトの名無しさん
2011/06/20(月) 01:41:46.440008デフォルトの名無しさん
2011/06/20(月) 01:53:41.94もう飽きて面倒くさいとき → BeanShell
0009デフォルトの名無しさん
2011/06/20(月) 02:18:06.210010デフォルトの名無しさん
2011/06/20(月) 07:40:10.15言語自体が動的と静的の両方いけるようになりつつあるこのご時世に何やってんの
0011デフォルトの名無しさん
2011/06/20(月) 07:43:36.610012デフォルトの名無しさん
2011/06/20(月) 07:52:02.57両方できる言語であっても動的型付けで書いた箇所については
柔軟性が得られる代わりに静的な型安全のメリットは得られなくなる
静的と動的がトレードオフの関係であることは従来と変わらないよ
0013デフォルトの名無しさん
2011/06/20(月) 08:13:37.88動的言語は静的いけませんw
0014デフォルトの名無しさん
2011/06/20(月) 08:33:13.54動的言語で安全なプログラムが組めるPGは
静的/動的両方使える言語でも安全に組める
一方、動的言語じゃ安全なプログラムを組めない
Java土方には使いこなせない
それだけの話
0015デフォルトの名無しさん
2011/06/20(月) 08:47:39.14「動的な機能を持つ言語」が常に動的に実行されるとは限らない。
「全部でなくてもいいのなら」静的に整合性チェックをすることは可能だ。
0016デフォルトの名無しさん
2011/06/20(月) 09:12:51.79頭悪いの?
0017デフォルトの名無しさん
2011/06/20(月) 09:18:08.98全体の安全性って何?
一部のPG(Java土方)が低能すぎて動的言語で
安全なプログラムを組めないのは事実だとしても、
それをスレタイのような一般論に拡張すんなよ
0018デフォルトの名無しさん
2011/06/20(月) 09:28:03.26そもそも「静的チェックで全体の整合性をチェックできる」ってのが幻想なんだよ。
ビルドエラーだけで全ての問題が解決できるならテストは不要なはずだろ?
実際には静的動的の両方で自動や手動のテストを行うわけだ。
この部分で動的言語は静的言語に比べて良い仕事をする。
CやC++ではABIが弱すぎてテストの自動化で不利だし、
Javaではリフレクション周りのコードがかったるくて重量級のフレームワークの出番になる。
たとえば、import不可のinterfaceをコールバック引数に持つメソッドの呼び出しとかな。
これが動的言語だと、
「モジュールを公開するときはテストコードもセットにするのが当然」という状態になっている。
perlですらそうだ。 http://gihyo.jp/dev/feature/01/test-perl
0019デフォルトの名無しさん
2011/06/20(月) 10:17:12.39動的・静的であること自体に起因する問題が皆無
0020デフォルトの名無しさん
2011/06/20(月) 10:26:51.250021デフォルトの名無しさん
2011/06/20(月) 10:27:50.30メリットがデメリットを上回るなら動的言語を使えば良い
安全性もテストで確保出来る
たったこれだけのことなのに、Java土方が「Java以外認めん!」
って鼻息荒くしてるだけだろ
0022デフォルトの名無しさん
2011/06/20(月) 10:39:55.590023デフォルトの名無しさん
2011/06/20(月) 10:53:27.03データに関して言えば、SQL自体が動的言語だからなwwww
コードに関して言えば、動的言語を使うと規模を大幅に縮小できるケースもある。
0024デフォルトの名無しさん
2011/06/20(月) 10:54:45.32O/Rマッパーのためにデータクラスを書き
Beanのためにデータクラスを書き
MVCのためにデータクラスを書いていた。
全部同じデータなのに。
設計した奴死ねよ
0025デフォルトの名無しさん
2011/06/20(月) 10:55:03.02Java程度ならCとたいして変わらん。
0026デフォルトの名無しさん
2011/06/20(月) 11:13:33.69だからユニットテストが機能しまくる。
0027デフォルトの名無しさん
2011/06/20(月) 11:16:55.07区別するようにしてるとバグが出にくい。
0028デフォルトの名無しさん
2011/06/20(月) 11:18:21.26文章に"土方しか集まらないから"が抜けてますよ?
0029uy ◆yyC0rYWEq2
2011/06/20(月) 15:48:45.30動的言語だと、行数小さくなるから
JAVA(笑)で作った物と比べて格段に小さくなって
JAVA(笑)でかかれたら大規模に見えても
動的言語(神)かかれたそれは大規模とみなされないことってあると思う
JAVA(笑)だと動的言語では本来かかなくてもいいコード沢山かいているとおもうし
そもそも
JAVA(笑)はひじかた言語でしょ?
ひじかたを効率よく使う為に、三マイクロ社が作った奴隷用言語でしょ?
趣味でJAVA(笑)やってる奴なんて・・・?
?
???
0030デフォルトの名無しさん
2011/06/20(月) 16:01:27.96なったのがJava。ポストCobolみたいになったのはたまたまのなりゆきだろう。
0031デフォルトの名無しさん
2011/06/20(月) 16:37:33.29それにJavaは明らかにポストC++を狙ってたと思う
C/C++に似てるのは偶然じゃない
0032デフォルトの名無しさん
2011/06/20(月) 16:50:11.74Gosling EmacsのMock LispはLispではなかったのだろうか。
0033デフォルトの名無しさん
2011/06/20(月) 16:51:59.06Mockだしな…
0034デフォルトの名無しさん
2011/06/20(月) 17:04:57.97もうEmacs使うのやめようぜとか言ったり、
あんまりLisp好きじゃ無い印象
0035デフォルトの名無しさん
2011/06/20(月) 17:21:44.38そこでなぜ、C#やC++と比べ無いのだろう。。。。
0036デフォルトの名無しさん
2011/06/21(火) 01:04:40.490037デフォルトの名無しさん
2011/06/21(火) 01:05:27.770038デフォルトの名無しさん
2011/06/21(火) 01:15:38.940039uy ◆yyC0rYWEq2
2011/06/21(火) 06:10:16.62JAVAはks
JAVAはks
JAVAはks
JAVAはks
JAVAはks
JAVAはks
JAVAはks
JAVAはks
JAVAはks
JAVAはks
JAVAはks
JAVAはks
JAVAはks
JAVAはks
JAVAはks
JAVAはks
JAVAはks
JAVAはks
JAVAはks
JAVAはks
0040デフォルトの名無しさん
2011/06/21(火) 21:13:02.270041デフォルトの名無しさん
2011/06/21(火) 21:19:06.50.NETってものがあるのに、JAVAがそれ無視して突っ走る理由が意味不明
素直に負けを認めて消えろよJAVA
たとえ自分たちがどれだけ先進したもの作ったとて、
この世界では一瞬で真似されるんだから、「商売」が成り立ってること事態奇跡であって
マジでレベルの高い奴らに目を付けられていない瞬間にしか儲けられない、とても運のいいことなんだよ
.NETを触る新言語を作るならまだしも、それ以外はもういいです
古い概念をいつまでも大事にしているJAVAは消えてほしい
0042デフォルトの名無しさん
2011/06/21(火) 22:36:14.74Java vs C#の勝負はついた。
0043デフォルトの名無しさん
2011/06/21(火) 23:15:10.03> 動と静をあわせ持った言語って無いの?
それは静とみなされるw
0044デフォルトの名無しさん
2011/06/21(火) 23:18:12.75豪語していたやつがいたから、
じゃあ、なんで半分の時間でできないの?
給料も半分でいいよね?って聞いたら
ブチ切られたw
0045デフォルトの名無しさん
2011/06/22(水) 01:35:30.91理解できた。
0046デフォルトの名無しさん
2011/06/22(水) 02:59:23.46言ってるやつがいるからバカにされてるだけだよw
0047uy ◆yyC0rYWEq2
2011/06/22(水) 04:36:49.28やたら複数行に渡ったコメントかいてるソース多いからな
ソースコードの中に含めなくても良いデータや、
そのプロジェクト内のライブラリフォルダを作るべきようなものまで散らかってると殺意覚える
読みにくいから行数を減らす努力しろと
関数の手前にかかれたコメント読んだ所で、結局「わかった気」になるだけで
本当にソース理解する為にはコメントではなくソースを読まなければならない
それかせめて別拡張子のソースコードにするとかさ
未だに行数気にしてる奴多いだろ
10万超えのソースコードってソース読んでると大抵、肥大している原因はコメント量と
外部ファイルにしておくべきデータをソース内に入れてることにある
俺は10万行もかいてるぜ(キリッ) ですかあ?
ぼくはウィンドウシステムからテキストエディタ作ってもそこの実装部分300行程度しかないよ
SHIFT,CONTROL,END,HOME,BACKSPACE,SPACE,DELETE,PAGEUP,PAGEDOWN,大文字小文字,各種,記号入力も対応させてその程度
静的言語でやったら10倍に膨れ上がると思う
実際、動的言語でかいたらソースコード量は半分どころの削減ではなく
静的言語と違ってリファクタリングしていけば無限に縮まるから( メタまでやっていいなら限界なし )
どの程度まで「動的にコードを生成」やっていいのかによる
0048デフォルトの名無しさん
2011/06/22(水) 07:13:21.000049デフォルトの名無しさん
2011/06/22(水) 08:47:59.960050デフォルトの名無しさん
2011/06/22(水) 08:56:28.75Java土方に比べたら時間も半分どころじゃないと思う
ていうか、Java土方ってまともにプログラミングできるの?www
0051uy ◆yyC0rYWEq2
2011/06/22(水) 10:36:04.24残念ながら客観的にみても長いプログラムかくほうがバカっすよ・・・
短くしないほうがかくのは簡単だからねぇ
Aクラス、Bクラス、Cクラスとあって、それぞれの共通データがあるとき
君たちゴミは一階層上にDクラスを作るんだと思うけど、
これはリファクタリングした場合、ひとつのクラスにすることが出来る
そうするとクラス数は4分の1、ソースコード量は、A〜Cのクラスを1つにまとめた時点で最低でも3分の1にはなってる
この手のリファクタリングは大変だから静的言語じゃまずやんねーよ
それぞれの引数の型や戻り値とか色々変えなきゃならなくなるんだから
流石に面倒くさいを通り越して効率が悪い
0052デフォルトの名無しさん
2011/06/22(水) 10:43:52.04動的な言語のほうがが静的な言語よりコード量が云々っていう意見が無くなる未来がそのうちくるかもね
まあこなそうだけど
0053デフォルトの名無しさん
2011/06/22(水) 10:51:30.30関数オブジェクトがあるのと、型の生成と推論がしやすいだけで。
0054デフォルトの名無しさん
2011/06/22(水) 11:00:39.460055デフォルトの名無しさん
2011/06/22(水) 11:10:21.07正規表現で一発ってコードとちまちま文字列操作してるコードは粒度おんなじ。
0056デフォルトの名無しさん
2011/06/22(水) 11:32:28.10C#のusingマネるコードでしか見たことないな
0057uy ◆yyC0rYWEq2
2011/06/22(水) 13:14:55.91ハッアアアwWw??www???
自分が冗長なコードかいてることに、
そういう見苦しい良いわけ言うのやめろよ・・・・・
おまえみたいなゴミが何をいったところで動的言語よりもコード量が増えるっつうのは静的言語の負けてる部分だってのに
それを・・・・・・・wwwwwwwwwwwwwwwww
0058デフォルトの名無しさん
2011/06/22(水) 14:08:32.26大味なアプリケーションしか書けない&動作が緩慢で小回りがきかない巨像。それが動的言語の正体。
0059デフォルトの名無しさん
2011/06/22(水) 14:15:41.26ま、簡単なところで、一昨日Pythonスレで何故か盛り上がった
辞書の辞書にリスト入れるケースがどれくらい書き易いか
やってみたら?
ttp://hibari.2ch.net/test/read.cgi/tech/1305217361/287
0060デフォルトの名無しさん
2011/06/22(水) 14:26:32.67from 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')
0061デフォルトの名無しさん
2011/06/22(水) 15:37:14.19他は冗長だからカス
0062デフォルトの名無しさん
2011/06/22(水) 16:20:11.46型の構造同値、なぜか流行らないよな。
Modula-3,Ocamlでもそうだった。
なぜだろ?
0063デフォルトの名無しさん
2011/06/22(水) 16:28:24.740064デフォルトの名無しさん
2011/06/22(水) 16:38:46.07// 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)));
}
}
}
0065デフォルトの名無しさん
2011/06/22(水) 17:53:58.40そのテストを用意するのが動的言語では効率いいからな。
静的言語ならテスト不要になるわけでもない。
>>64
>hash.containsKey("a") && hash.get("a") != null
これは単に冗長。 hash.get("a") != null だけでいい
ほかにもわざとやってるんじゃないかと思うくらい冗長に書いてある。
0066デフォルトの名無しさん
2011/06/22(水) 18:05:23.43public 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 の有無って静的動的関係なくね?
0067デフォルトの名無しさん
2011/06/22(水) 18:07:57.160068デフォルトの名無しさん
2011/06/22(水) 18:14:45.57誰か書ける人居ない?
0069デフォルトの名無しさん
2011/06/22(水) 18:27:41.70{
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);
って書けるようになるんだけど
0070デフォルトの名無しさん
2011/06/22(水) 18:34:46.80静的型チェックを維持したままやるなら、
ruby のコードみたいに、デフォルトの値を設定するコールバックを用意するのがスジ。
0071デフォルトの名無しさん
2011/06/22(水) 18:38:13.63implicit def でvivification対応のメソッドも後付できるし、
デフォルトの値を設定するコールバックを指定/記述する部分も簡潔にいけそう
0072デフォルトの名無しさん
2011/06/22(水) 18:39:22.01もっと短くなるね。
0073デフォルトの名無しさん
2011/06/22(水) 18:41:46.83Javaだとコールバックの記述が無名クラスだから、どうしても冗長になるよな…
finalつけないと値を覚えてくれないとかも正直ぎこちない。
0074デフォルトの名無しさん
2011/06/22(水) 18:45:11.470075デフォルトの名無しさん
2011/06/22(水) 19:13:38.60派生型がアリならこんなとこか
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");
}
}
0076デフォルトの名無しさん
2011/06/22(水) 19:29:19.350077デフォルトの名無しさん
2011/06/22(水) 19:33:17.88Ruby や Perl の push と Python の append て同じような動作なの?
push はリストの先頭に、append はリストの最後に加えるイメージ。
そのどれも詳しくないけど。
0078デフォルトの名無しさん
2011/06/22(水) 19:38:08.19import scala.collection.mutable.{Map, Buffer}
val hash = Map[String,Map[String, Buffer[Int]]]()
hash.getOrElseUpdate("a", Map()).getOrElseUpdate("b", Buffer()) += 111
0079デフォルトの名無しさん
2011/06/22(水) 19:40:11.85全部末尾に追加
0080デフォルトの名無しさん
2011/06/22(水) 20:36:56.95import scala.collection.mutable.{Map, Buffer}
val hash = Map[(String,String), Buffer[Int]]()
hash.getOrElseUpdate(("a","c"), Buffer()) += 111
0081デフォルトの名無しさん
2011/06/22(水) 20:57:59.16M と MM が最高にダサイ
0082デフォルトの名無しさん
2011/06/22(水) 21:51:21.14Perlのpush/popは末尾、unshift/shiftが先頭
0083デフォルトの名無しさん
2011/06/22(水) 23:13:18.56テストコードを書いてると思えばいい。
あの長さにはテストコードが含まれてる。
動的言語で同等のテストコードを書いてみ。
Javaと同じで型チェック程度でいいからさ。
そうすると、動的言語も静的言語も
違いはなくなる。
0084デフォルトの名無しさん
2011/06/22(水) 23:14:49.870085デフォルトの名無しさん
2011/06/22(水) 23:47:58.07意味不明というかただの妄想に聞こえる
0086デフォルトの名無しさん
2011/06/22(水) 23:59:34.80>>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!
0087デフォルトの名無しさん
2011/06/23(木) 00:04:51.46getOrElseUpdate()の引数のMap()やBuffer()は実行されないんだよね?
Scalaいいね
0088デフォルトの名無しさん
2011/06/23(木) 00:48:17.670089デフォルトの名無しさん
2011/06/23(木) 03:38:58.34意味不明じゃないよ。
型をしっかり書くということは
エラーチェックになっている。
それらの型以外が入らないわけだから。
動的言語でそれをやったところで、実行時にしかわからないわけだから
片手落ちにしかならないが、それでも型チェックを
加えてみって話。
0090デフォルトの名無しさん
2011/06/23(木) 05:01:20.630091デフォルトの名無しさん
2011/06/23(木) 05:03:11.30なので >>89 の論旨はおかしい
0092デフォルトの名無しさん
2011/06/23(木) 05:05:31.890093デフォルトの名無しさん
2011/06/23(木) 05:54:09.50通常のアプリのような
それなりの規模のものは、
動的言語で書いても全然短くならないんだよな。
なんでだろ?
0094デフォルトの名無しさん
2011/06/23(木) 06:07:15.540095デフォルトの名無しさん
2011/06/23(木) 06:11:23.29そりゃ君が動的言語に向いた設計をできてないからだろ
0096デフォルトの名無しさん
2011/06/23(木) 06:13:44.940097デフォルトの名無しさん
2011/06/23(木) 06:16:00.48その前に「短いプログラム」じゃないのはどの程度の規模になるのか尋ねておこうか
0098デフォルトの名無しさん
2011/06/23(木) 06:30:11.52静的言語がIDE立ち上げてプロジェクト作るのに
かかる時間内に書ける程度までだろ
0099デフォルトの名無しさん
2011/06/23(木) 06:45:16.29gmailのブラウザ側スクリプトすら書けなさそうだ、君には
0100デフォルトの名無しさん
2011/06/23(木) 06:52:34.91今はJavaScriptしかのってないから仕方なく動的言語使っているってだけで
0101デフォルトの名無しさん
2011/06/23(木) 06:54:18.04「ブラウザスクリプトも静的言語の方が向いている」は全然別のことを言ってるんだが、分かってるのかな
0102デフォルトの名無しさん
2011/06/23(木) 06:55:47.450103デフォルトの名無しさん
2011/06/23(木) 06:55:58.04全然別の話題を唐突に語りだしたのはおまえだよ、馬鹿
0104デフォルトの名無しさん
2011/06/23(木) 07:24:32.980105デフォルトの名無しさん
2011/06/23(木) 07:26:18.860106デフォルトの名無しさん
2011/06/23(木) 07:40:05.65どんだけ低能なんだよwww
ふつーのPGならJavaよりは圧倒的に短くなるよ?
0107デフォルトの名無しさん
2011/06/23(木) 07:40:56.52コーディングの問題じゃないよ。
0108デフォルトの名無しさん
2011/06/23(木) 07:41:18.32あれ現在最もインタープリタやコンパイラなどの言語処理を簡単にかけるのはMLとかの
静的言語だと思うけど。
0109デフォルトの名無しさん
2011/06/23(木) 07:42:37.83コンパイラは静的言語の方が簡単。
0110デフォルトの名無しさん
2011/06/23(木) 07:42:39.560111デフォルトの名無しさん
2011/06/23(木) 07:44:29.44GoogleやTwitterはJavascript直接書いたりなんかしない。
静的ツールを使って自動生成しているよ。
0112デフォルトの名無しさん
2011/06/23(木) 07:48:45.34C/C++を除けばその言語自身で書かれてることが多い
0113デフォルトの名無しさん
2011/06/23(木) 07:50:14.79動的言語では人間が書かなければならないテストが膨大になってしまう。
静的言語ではケアレスミスはだいたい型チェッカがとってくれて、人間は
本当に大切なアプリケーションロジックを中心にテストできる。
これは重要だと思う。
0114デフォルトの名無しさん
2011/06/23(木) 07:56:40.84動的言語のテストってのはこういうもんだ!って
具体的な話になっているのをPart1から3までで見たことが無い
0115デフォルトの名無しさん
2011/06/23(木) 08:03:25.28あとはPythonに付いてる標準のunittest使ってるわ
0116デフォルトの名無しさん
2011/06/23(木) 08:03:56.91http://cpansearch.perl.org/src/TIMB/DBI-1.616/t/
0117デフォルトの名無しさん
2011/06/23(木) 08:04:59.93デスクトップアプリとWebブラウザアプリの性能差がなくなる。
むしろJVMなんか使ったものより快適になるのでは
0118デフォルトの名無しさん
2011/06/23(木) 08:06:35.32テストをちゃんとすると動的言語の方がより膨大なコード量になってしまうし、
拡張や変更のコストも大きくなってしまう。
テストをちゃんと考えるべきシステムは動的言語から静的言語へ移ってきてるよ。
0119デフォルトの名無しさん
2011/06/23(木) 08:06:41.85動的言語は型チェックってすることが多くないからなあ
むしろインタフェースに重点を置いて
引数はreadってメソッド持ってる?って調べることが多い
テスト文化の先端を行くRuby使いはいませんか
0120デフォルトの名無しさん
2011/06/23(木) 08:07:03.23これ書くくらいなら
静的言語使ったほうがいいような
0121デフォルトの名無しさん
2011/06/23(木) 08:14:54.12本当に必要なとこだけ書くんだよ
あとデコレータ駆使すれば型以外にも様々なチェックが
短いコードで出来る
0122デフォルトの名無しさん
2011/06/23(木) 08:16:28.48クラッシュしたら修正して再起動すればいい
0123デフォルトの名無しさん
2011/06/23(木) 08:18:32.21本当に必要なとこってどうやって決めるの?
判断ミスしたりしないの?
0124デフォルトの名無しさん
2011/06/23(木) 08:30:42.16そんなんだから動的言語は信頼性が低いとかバグが多いとか言われるんだよ。
動的言語でWebサイト作ってインターフェイスのバグによって決済が行われず、
訴訟問題に発生した例も知ってる。
バグの原因はメソッド名のタイポだぜ、あほらしい。
0125デフォルトの名無しさん
2011/06/23(木) 08:36:43.35動的/静的型付け言語どちらであっても、真面目にテストを書いたら
コード全体の半分以上はテストになってしまう
実際グーグルのソースコードはそんな感じらしいが……
0126デフォルトの名無しさん
2011/06/23(木) 08:38:47.13公開してるインターフェースでかつ
総称的な振る舞いが期待されない関数だけに
チェック付けてるな
判断誤りの可能性はあるが、俺は問題になったこと無い
0127デフォルトの名無しさん
2011/06/23(木) 08:39:28.47お前のようなアホはSQLインジェクションで氏ね
0128デフォルトの名無しさん
2011/06/23(木) 08:42:03.89ちょっとしたコード書くだけで>>75みたいになる言語じゃ
テストなんて面倒くさすぎるのかもしれんが
同じコードが動的言語だと>>60だからね
そりゃテスト書いてもおつりが来るよ
0129デフォルトの名無しさん
2011/06/23(木) 08:42:39.920130デフォルトの名無しさん
2011/06/23(木) 08:43:48.48_プレフィックス付きは非公開という暗黙の了解が
0131デフォルトの名無しさん
2011/06/23(木) 08:48:00.90テスト書いてみてよ
0132デフォルトの名無しさん
2011/06/23(木) 09:07:46.44本当は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()
0133132
2011/06/23(木) 09:14:13.560134デフォルトの名無しさん
2011/06/23(木) 09:35:19.54VB6がクソミソに言われながらも、実用場面で広範囲にわたって使われたのも皮肉。
0135デフォルトの名無しさん
2011/06/23(木) 09:58:29.78#include <map>
#include <string>
#include <vector>
int main() {
using namespace std;
map<string,map<string,vector<string> > > h;
h["a"]["b"].push_back("111");
}
0136デフォルトの名無しさん
2011/06/23(木) 10:06:01.03超高速なLLとして使ってるぜ
0137デフォルトの名無しさん
2011/06/23(木) 10:10:50.96Variant型使いまくりのVB6で静的言語とかただのネタだろ。
静的言語なら常に型チェックを行うわけじゃないんだぜ
0138デフォルトの名無しさん
2011/06/23(木) 10:12:00.22データと型が一致しないんじゃ「静的言語だから型チェックは大丈夫」とかただの念仏ですよね
0139デフォルトの名無しさん
2011/06/23(木) 10:15:53.17じゃあ今度はJavaのようにAutovivificationしないバージョン書いてみて
0140デフォルトの名無しさん
2011/06/23(木) 10:20:14.24これってコンパイル時にエラーになってくれるの?
0141デフォルトの名無しさん
2011/06/23(木) 12:45:41.45VB6でVariantはあまり使わない。外部のクラスを扱うときにObjectが多用されるぐらい。VB(COM)にinterfaceあるって失念してる人多いな。
0142デフォルトの名無しさん
2011/06/23(木) 13:11:59.34boost::property_tree::ptree pt;
read_json("hoge.json", pt);
cout << pt.get<string>("hoge") << endl;
0143デフォルトの名無しさん
2011/06/23(木) 13:33:26.82データに対する何のチェックもないよねそれ
0144デフォルトの名無しさん
2011/06/23(木) 13:38:43.150145デフォルトの名無しさん
2011/06/23(木) 15:07:32.27スレタイ嫁
0146デフォルトの名無しさん
2011/06/23(木) 15:12:52.48無理
0147デフォルトの名無しさん
2011/06/23(木) 16:13:23.540148デフォルトの名無しさん
2011/06/23(木) 16:21:00.420149デフォルトの名無しさん
2011/06/23(木) 16:43:35.86そのLinux上で好きな言語使いなよ
0150デフォルトの名無しさん
2011/06/23(木) 17:23:29.610151デフォルトの名無しさん
2011/06/23(木) 17:40:32.570152デフォルトの名無しさん
2011/06/23(木) 19:52:26.55まあ・・・なんだ、あんたも大変だな
0153デフォルトの名無しさん
2011/06/23(木) 19:59:31.35使える場面が限定されすぎるのが残念だ。
0154デフォルトの名無しさん
2011/06/23(木) 20:46:22.39マジで
0155デフォルトの名無しさん
2011/06/23(木) 21:13:15.350156デフォルトの名無しさん
2011/06/23(木) 21:48:48.98でかすぎてAS3ですっかりJavaチックな書き方が浸透したと思う。
0157デフォルトの名無しさん
2011/06/23(木) 21:52:28.02Javaチックだけれどもクロージャが書きやすい点は良い > AS3
関数オブジェクトのシグネチャを検証しないのは物足りないし、ジェネリクス
欲しいし、変数が関数スコープとかウンコだけれども。
0158デフォルトの名無しさん
2011/06/23(木) 22:08:12.20普通のプロジェクトでは大差がないのか考えてみた。
1.動的言語は基本的な命令がライブラリをロードしないで使える。
printとかなにもロードしないで実行出来る。だけど実際のプロジェクトでは
他に多くのライブラリを使用するので差がなくなる。
2.動的言語は変数を宣言しないで使える。
だけど実際のプロジェクトではstrictとかwarningをONにするので結局変数宣言している
3.動的言語はクラスを書かなくて良い
だけどある程度大きくなると必然的にクラスを使わないと管理しづらい。
フレームワークを使うとほぼ必然的にクラスを使うことになる。
4.関数を作らない前提の比較だから
短いコードでは基本的に関数を作成しない。実際のプロジェクトでは関数を
作ることで大幅にコードの削減をしているが、短いコードの例ではその利点が生かせない。
こんな所かな?
他にもあったら教えてください。
0159デフォルトの名無しさん
2011/06/23(木) 22:08:21.550160デフォルトの名無しさん
2011/06/23(木) 22:09:11.350161デフォルトの名無しさん
2011/06/23(木) 22:10:11.300162デフォルトの名無しさん
2011/06/23(木) 22:11:28.360163デフォルトの名無しさん
2011/06/23(木) 22:18:41.48かけるのは関数オブジェクト。
クロージャというのなら、クロージャを定義した場所(関数)の
ローカル変数が見える必要がある。
0164零細 ◆REISAIxhXo
2011/06/23(木) 22:20:31.22これからこのスレに書き込んだヤツは漏れ無く
大都会都民じゃけぇの。
0165デフォルトの名無しさん
2011/06/23(木) 22:25:06.03ローカルクラスは、staticなローカル変数にアクセスできる。
普通使わんけどな。
0166デフォルトの名無しさん
2011/06/23(木) 22:29:13.680167デフォルトの名無しさん
2011/06/23(木) 22:31:15.02インタプリタで書かれたインタプリタか、胸熱じゃな。
0168デフォルトの名無しさん
2011/06/23(木) 22:31:51.39参照できるというクロージャ本来の特徴よりも、単に無名関数をより少ない
記述量で宣言できるという記法的な面の方が大きいと思う。
(functionって書かなくて良い分Rubyとかの方がより楽だけど)
Javaの無名クラスはウンコ。ノイズが多すぎる。
0169デフォルトの名無しさん
2011/06/23(木) 22:32:54.64int n_;
public:
can_divide(int n) : n_(n) {}
bool operator()(int x) const { return x % n_ == 0; }
};
0170デフォルトの名無しさん
2011/06/23(木) 22:36:23.66メソッドを二つ持っているオブジェクトを
代入したいようなときってどうするの?
0171デフォルトの名無しさん
2011/06/23(木) 22:37:23.88どういうことだ
0172デフォルトの名無しさん
2011/06/23(木) 22:37:29.35何を持って動的としてるか解からんなぁ。
タダの動的型付け言語のことをいうとるんじゃろうか。
0173デフォルトの名無しさん
2011/06/23(木) 22:50:25.52int function()
{
static int n;
struct _:interface<int>
{
bool operator()(int x) { return x % n_ == 0; }
} closeure;
algorithm(static_cast<interface<int>&>(closeure));
}
0174デフォルトの名無しさん
2011/06/23(木) 22:55:14.510175デフォルトの名無しさん
2011/06/23(木) 22:56:34.870176デフォルトの名無しさん
2011/06/23(木) 23:41:53.640178デフォルトの名無しさん
2011/06/24(金) 00:49:18.61動的言語で短いコードを書くためには、実行時メタ機能などを
使いこなす必要があるが、土方レベルのPGには使いこなせず、
静的言語にもある機能だけでプログラム書くから
だから、土方が動的言語を使っても短く書けない
0179デフォルトの名無しさん
2011/06/24(金) 00:49:54.44public:
const Platinum to_platinum() = luxury;
const Iron to_iron() = cheap;
};
0180デフォルトの名無しさん
2011/06/24(金) 00:52:39.930181デフォルトの名無しさん
2011/06/24(金) 01:20:52.76じゃあ、責任持って
実行時メタ情報とやらを使うのと
使わないのとでどれくらい差があるかを
例示してね。できなきゃ笑おう。みんなでw
0182デフォルトの名無しさん
2011/06/24(金) 01:28:07.80まずは>>158が
> なんで短いコードなら動的言語は圧倒的に少ない行数でかけるのに、
> 普通のプロジェクトでは大差がないのか考えてみた。
と言っているので、大差ないという例をコード付きで示してもらおう。
そして、そのウンココードを見て笑おう。
そのあとなら、そのウンココードを短くしてあげても良いよwww
0183uy
2011/06/24(金) 01:28:28.99何が「こんなところかな?(キリッ)」 なわけ
>普通のプロジェクトは大差ないって、
はぁあ? どこのプロジェクトを比較してんの???
>変数宣言に関しては
静的言語だろうとハッシュ利用すれば宣言なしで使えるし
動的言語でも、変数宣言は行うから。 いきなりコードの途中から変数つくって使ったら
可読性下げるに決まってんだろ、 だから土方には仕えないって言ってるんだよ
>クラスをかかなくていい?
は? wwwwwwww 動的静的かんけいねえよwwwwwwwバカなの??Wwwww
アルゴリズムレベルでもの考えろよwwwwwwww
>関数
は??? 関数を作ることでコード削減って意味不明
関数も含めてソースコードだろうがwwwwwww
つうか何?? オブジェクト指向限定でもの言ってんの????wwwwwwwww
まずそこからして以下略
よく考えてから書き込みしてくれ・・・・・・・・・・・・・・・・・・・・・・
0185デフォルトの名無しさん
2011/06/24(金) 01:37:29.49短く書けても他にデメリットがあるなら全体としての評価は下がる
0186デフォルトの名無しさん
2011/06/24(金) 01:43:47.860187デフォルトの名無しさん
2011/06/24(金) 01:44:15.110188デフォルトの名無しさん
2011/06/24(金) 01:51:41.65移行に苦労しているからな
大規模プロジェクトに使うなんてとても無理
0189デフォルトの名無しさん
2011/06/24(金) 01:53:33.10じゃあこれで
https://github.com/edavis10/redmine/blob/master/app/controllers/projects_controller.rb
0190デフォルトの名無しさん
2011/06/24(金) 01:55:46.41Ruby1.9やPython3レベルの"後方互換性の無い"変更が
Javaで起こったら暴動が起きるレベル
0191デフォルトの名無しさん
2011/06/24(金) 02:02:05.19こんな話にはならなかったのにねえ。
0192デフォルトの名無しさん
2011/06/24(金) 02:10:54.94それそれ。
結局ある程度の規模になると、
どうしてもそういう風になっちゃうよね。
あまり短くなったと思えない。
0193デフォルトの名無しさん
2011/06/24(金) 02:14:02.88動的言語だって関数もクラスも書くけど、問題はそこじゃなくて「どう書くか」なんだよ
たとえば「あるモジュールのあらゆるメソッドの呼び出しの前後に処理を挟みたい」とか
静的言語だと悪夢だけど動的言語だとそうでもない。
たとえば「コールバック引数を受けとるeachメソッドを使うようにしたら、呼び出し側の記述量が逆に増えた」とか
言語によっては全然増えない。
そういう「動的言語なら簡単に書ける」設計をしないんなら、そりゃ静的言語と大差ない記述量になるだろう。
0194デフォルトの名無しさん
2011/06/24(金) 02:19:29.03静的言語でもそうでもない。
たとえばJavaならAspectJを使えばいい。
また実務なら何らかのフレームワークを使うわけで、
そのフレームワークにフィルタやフックなどの名前で同じことができる。
springフレームワークにもAOPの機能がある。
そう、ここに書き込める程度の小さい例なら言語に搭載している分
短くかけるが、実務なら言語に搭載してなくても、ライブラリによって補完
するわけで大差がなくなるわけさ。
0195デフォルトの名無しさん
2011/06/24(金) 02:23:01.21メソッドの前後に処理を入れていくことで
創り上げる設計なのか?
0196デフォルトの名無しさん
2011/06/24(金) 02:25:53.65構造化設計なら聞いたことあるが
動的言語設計なんてのは聞いたこと無いな?
どうせ動的言語でも設計はオブジェクト指向とかなんだろ?
0197デフォルトの名無しさん
2011/06/24(金) 02:29:47.65これと同等のコードを静的言語で何行でかける?
まぁ、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;
}
}
0198デフォルトの名無しさん
2011/06/24(金) 02:47:47.20やっぱ本質を分かってないよ。
それと同じことをするコードを0から作ったら
行数は増えるよ。
だけど、現実にはそんなことをするための
ライブラリを使うことで、わずかの行で済む。
まさにこう言うことじゃないか。
> 4.関数を作らない前提の比較だから
> 短いコードでは基本的に関数を作成しない。実際のプロジェクトでは関数を
> 作ることで大幅にコードの削減をしているが、短いコードの例ではその利点が生かせない。
0199デフォルトの名無しさん
2011/06/24(金) 02:54:33.62以前Pythonスレで見たこれを静的言語で書いてみてほしい
興味本位なんで言語の優劣とは関係なしで
def nesteddict():
return defaultdict(nesteddict)
d = nesteddict()
d[0][1][2][3][4] = 5
0200デフォルトの名無しさん
2011/06/24(金) 02:59:17.74今日もバグってる関数が見つかったら。
今すぐ入れ替えます!と答えてる。
0201デフォルトの名無しさん
2011/06/24(金) 03:02:15.52defaultdictという関数の実装を教えてくれ。
0202デフォルトの名無しさん
2011/06/24(金) 03:02:23.14動的言語で作られたソフト以外は拒否するみたいな
0203デフォルトの名無しさん
2011/06/24(金) 03:09:02.11let prefix = "Text";
let function = prefix & "Output";
function("text");
こういうメタシステムでも動的だろもっと視野を広げろよ。
0204デフォルトの名無しさん
2011/06/24(金) 03:09:27.23Pythonしらんから良く解らんが、これを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)
まあ、結局はコードが短く書けるかどうかってのは、
そういうクラスが用意されているかの問題でしかない。
0205デフォルトの名無しさん
2011/06/24(金) 03:11:29.53それ、VBのCallByNameみたいなもんか?
0206デフォルトの名無しさん
2011/06/24(金) 03:12:30.48defaultdictは辞書(ハッシュマップ)のコンストラクタで、
Autovivificationするときに引数にとったクロージャを
オブジェクトの生成関数として使う
0207uy ◆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
0208uy ◆yyC0rYWEq2
2011/06/24(金) 03:34:43.68しつもんです
C#(笑)でこれかくとどうなるんですか
p ("1".."9").map(&:next).map(&:to_i).inject:+
def a
p 1
yield iterator?
p 3
end
a do p 2 end
0209uy ◆yyC0rYWEq2
2011/06/24(金) 03:37:22.64しつもんです
C++(笑)でこれかくとどうなるんですか
("a".."f").each do | m |
if "b"==m.."d"==m
p m
end
end
0210uy ◆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
0211uy ◆yyC0rYWEq2
2011/06/24(金) 03:58:24.73kiu =[
[ "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
0212デフォルトの名無しさん
2011/06/24(金) 04:10:03.14「eval("code...") をJavaで書いて下さい」
0213デフォルトの名無しさん
2011/06/24(金) 04:10:44.060214デフォルトの名無しさん
2011/06/24(金) 04:11:16.46default_factoryはdefaultdict()を呼び出す側が用意するもの(>>199 では nesteddict を渡している)だから
インタフェースや宣言はしても、実装はしちゃダメよ
0215uy ◆yyC0rYWEq2
2011/06/24(金) 04:22:42.93みんなわかっているよ
ハンデは与えてやれよ・・・・・・・
頑張ればまだ静的言語でかけるかもしれないコードをおれはのせたよ
静的言語でやったら冗長するんだろうけどねwwwwwwwww
0216デフォルトの名無しさん
2011/06/24(金) 04:28:25.64ローカル変数へのアクセスがなくてもいいんならDynamicJavaとか(保守されてないけど)
既存のコードもあるんだけどね。
0217uy ◆yyC0rYWEq2
2011/06/24(金) 04:57:29.50eval以外のクロージャにしてもlambdaにしても、ローカル変数にアクセス出来ないなんて
利用価値がないし
0218デフォルトの名無しさん
2011/06/24(金) 05:20:29.350219デフォルトの名無しさん
2011/06/24(金) 06:18:51.770220デフォルトの名無しさん
2011/06/24(金) 07:07:21.850221デフォルトの名無しさん
2011/06/24(金) 08:14:06.67そういうdefaultdictが用意されているという前提で、
それを利用するコードを書けばいいのか?
Javaならクロージャの代わりに無名クラスに
するだけの話だと思うが・・・
0222デフォルトの名無しさん
2011/06/24(金) 08:32:50.42こんなオナニーコードじゃなくて金になりそうな例でお願いします
0223uy ◆KOAgYBL/Xg
2011/06/24(金) 09:12:36.980224デフォルトの名無しさん
2011/06/24(金) 09:28:37.88一行が必須なら、それに当たるメソッドつくれば、たいていの言語で、同じコードが動く。
もっと、らしいのを出してこい。
0225uy ◆KOAgYBL/Xg
2011/06/24(金) 09:40:31.980226デフォルトの名無しさん
2011/06/24(金) 10:26:34.37http://ideone.com/vXzC8
0227デフォルトの名無しさん
2011/06/24(金) 10:48:44.070228デフォルトの名無しさん
2011/06/24(金) 10:49:24.12>>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')
0229デフォルトの名無しさん
2011/06/24(金) 10:56:12.07安全なソフトを作ることに自信がないからって、ちっちゃなトイプログラムが
簡潔に書けることをアピールしだすwww
うゆさんの投下するプログラムって、簡潔なのにすごく「安全なソフトウェア」ですね^^^^^
0230uy ◆KOAgYBL/Xg
2011/06/24(金) 11:01:54.700231デフォルトの名無しさん
2011/06/24(金) 11:08:09.24http://ideone.com/FBs8v
同じサイトで元のRubyコード実行してみたけど、ソースに日本語が含まれてるせいか
うまく動かなかったんで、実行結果の比較検証はしてない
0232デフォルトの名無しさん
2011/06/24(金) 11:33:18.35>>58のいう「スニペットの流用」がどれだけやり易いかを
コードを例にして議論してる
もし、>>58のいうようにスニペットの流用が静的言語の方が優れてるなら、
既存のコードから少ない修正で別の用途にも使えるはず
0233デフォルトの名無しさん
2011/06/24(金) 12:26:01.200234デフォルトの名無しさん
2011/06/24(金) 12:39:54.75エロい人、乙であります
0235デフォルトの名無しさん
2011/06/24(金) 13:17:16.77難解な手法は「俺が検証しなくても誰かがするだろう」というパターンに陥りやすい
0236デフォルトの名無しさん
2011/06/24(金) 14:04:04.66静的動的は関係ない例ばかりだなぁ。
0237デフォルトの名無しさん
2011/06/24(金) 14:18:33.35動的言語で安全なソフトが作れる可能性が大きくなるな。
0238デフォルトの名無しさん
2011/06/24(金) 14:27:50.76危険、遅い、臭いの三重苦だ
0239デフォルトの名無しさん
2011/06/24(金) 14:51:15.04自慢のIDEでちゃちゃっと書いてくださいよ
え?もしかしてトイプログラムも書けないの?
0240デフォルトの名無しさん
2011/06/24(金) 14:53:07.14もちろんevalの手前にあるローカル変数にもアクセス出来る奴。
でなきゃ「動的言語と利便性はたいして変わらない」なんて言えないでしょ?
0241デフォルトの名無しさん
2011/06/24(金) 15:08:39.520242デフォルトの名無しさん
2011/06/24(金) 15:10:47.41データ中にコードを埋め込めるので、データ側で何でも書けるようになる。
0243デフォルトの名無しさん
2011/06/24(金) 15:13:07.060244デフォルトの名無しさん
2011/06/24(金) 15:14:56.080245デフォルトの名無しさん
2011/06/24(金) 15:17:36.88$_='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
0246デフォルトの名無しさん
2011/06/24(金) 15:18:14.65そりゃサンドボックスの話になるな。べつに不可能事じゃない。
0247デフォルトの名無しさん
2011/06/24(金) 15:27:57.94emacs ,、GIMP, ブラウザ, 等がそうだな。
アプリの上で動くスクリプトを書くんじゃなくて、そういうアプリを作るにはパーサとインタプリタを含むエンジンを内蔵するしかない。
もう一つのパターンは、単に「簡単なリフレクション」として用いられる。
リフレクションが必要だと思われるあらゆる例で、リフレクションよりも簡潔に書くことができる。
0248デフォルトの名無しさん
2011/06/24(金) 15:34:12.26>>86で挙げられたPythonの型チェックにしても実行前に検証は可能かと
問われればそれは無理。これもはいそうですね、でおしまい。
つうかパラダイムが違うんだから一方で存在する機能が他方で存在しない
ことなんて普通。
evalがどうしても必要な問題ならevalが存在する言語でプログラム書けば
良い。自分だけの小道具として使うならともかく、他人様の入力を受け
付けるシステムで気軽に使える場面がそう豊富だとは思わないが。
0249デフォルトの名無しさん
2011/06/24(金) 15:42:17.26インタプリタを内蔵してるアプリなんて別に珍しくないんだが。
それらは安全性のために色々仕掛けを施してはいるが、
結局やってることはevalと変わらない。
で、たとえばサーバ用途でならevalで十分なシチュエーションは普通に存在する。
動的言語で使われるテンプレートシステムのいくつかは実際にevalに依存してるしな。
利便性があるというのがtrueなのは間違いない。
静的言語で同じことをやろうとすると大がかりなインタプリタが必要になる上に、
コールスタック上のローカル変数にアクセスする手段が提供されないので
実装が余計に面倒になる。
別に不可能事はなにもないのだが、煩雑なばかりで何も嬉しくない。
0250デフォルトの名無しさん
2011/06/24(金) 16:15:10.46>利便性があるというのがtrueなのは間違いない
特定の用途に関して利便性があるのは否定しないよ。
ただ「気軽に使える場面がそう豊富だとは思わない」と書いたように、通常
のプログラミングの中でどれだけ使える場面があるのかということ。
毎日テンプレートエンジン書いたりインタプリタの組み込みをしている人間
がどれだけいる? それは結構、特殊だよ。
そもそもevalを気軽に使える場面が豊富なプログラミング言語なんて嫌だw
そういう場面ではevalではなく通常の構文の範疇で同じ事を簡単にかける
ように言語は設計されているべき。
0251デフォルトの名無しさん
2011/06/24(金) 16:17:31.43ちなみに静的言語で同じ事をするのにスクリプト機能であればインタプリタ
の実装を拾ってきて組み込むし、テンプレートエンジンであればパーサーを
書くでしょう。実際どちらも便利なツールやライブラリの類が存在するので
そう難しい話ではない。
evalで実行環境のインタプリタを流用するのは簡単だけれども、入力を検証
しないと危ないし、テンプレートエンジンにしても受領できる構文がホスト
言語の構文にどこかしら縛られる。
0252デフォルトの名無しさん
2011/06/24(金) 16:18:26.69そもそもよくある例だから挙げられてるんじゃないよなコレ
動的言語らしい機能の端的な面として出てきてるだけで。
0253デフォルトの名無しさん
2011/06/24(金) 16:25:38.74極端すぎる
0254デフォルトの名無しさん
2011/06/24(金) 16:28:50.93うん。だから>>240についても答えは、
「eval無いよ。でも無くても動的言語と利便性はたいして変わらない。
だってeval使わなきゃならない場面なんて良くある例じゃないし」
になるんだよな。
0255デフォルトの名無しさん
2011/06/24(金) 16:30:57.22evalだけならともかく、実際には動的言語らしい機能って他にも一杯あるしな。
0256デフォルトの名無しさん
2011/06/24(金) 16:33:59.72テストを普通に書けば動的言語でも安全だし、
テスト不足なら静的言語でも危険だろう。
0257デフォルトの名無しさん
2011/06/24(金) 16:44:07.76現実の大規模システムで使われているのは静的言語
0258デフォルトの名無しさん
2011/06/24(金) 16:45:03.680259デフォルトの名無しさん
2011/06/24(金) 16:48:05.60静的言語で書き直さなきゃらならい羽目になるんだったら
最初から静的言語で書いた方がいいよな
0260デフォルトの名無しさん
2011/06/24(金) 16:49:39.210261デフォルトの名無しさん
2011/06/24(金) 16:50:39.68型チェックがなくて余分にテストを書かないといけない分であっという間にマイナスだろ
0262デフォルトの名無しさん
2011/06/24(金) 16:50:48.560263デフォルトの名無しさん
2011/06/24(金) 16:53:48.33おまえが知っているのは言葉だけで中身知らないだろw
0264デフォルトの名無しさん
2011/06/24(金) 16:54:54.84それって動的言語はテストを書くけど
静的言語は全然テスト書かない場合の比較ですよね?
0265デフォルトの名無しさん
2011/06/24(金) 16:56:57.96そんなわけない
動的言語には大規模プロジェクトそのものがないから比較不可能だけど
0266デフォルトの名無しさん
2011/06/24(金) 16:58:22.59じゃあテスト書いてみてよ
0267デフォルトの名無しさん
2011/06/24(金) 17:01:16.71事例だけで確定するんなら、このスレいらないけどな。
まあ対抗事例も山ほどあるが。
http://storecrowd.com/blog/top-50-ruby-on-rails-websites/
https://www.socialtext.net/perl5/websites_using_perl
http://www.masonhq.com/?MasonPoweredSites
http://itpro.nikkeibp.co.jp/article/NEWS/20071022/285089/
http://journal.mycom.co.jp/news/2007/03/15/003.html
0268デフォルトの名無しさん
2011/06/24(金) 17:03:44.24Webサイトのアクセス数って意味?
0269デフォルトの名無しさん
2011/06/24(金) 17:04:44.70実際問題、動的言語だと型チェックよりも欲しい型への変換のが多くね?
結果的に「型変換出来ない=例外吐くになる」ってのが多いわ
例えば「引数として型Aを要求する関数」よりも「引数を『型Aを表す何か』として解釈し、そのように振る舞う関数」を書く
結果的に、型Aへの変換が出来ない引数は淘汰される感じ
0270デフォルトの名無しさん
2011/06/24(金) 17:04:57.820271デフォルトの名無しさん
2011/06/24(金) 17:12:42.32使い物にならないよね
0272デフォルトの名無しさん
2011/06/24(金) 17:14:51.41その言語を使ってどんだけのコードを書くかの問題じゃないか?
そもそもライブラリの安全性とそれを呼び出すコードの安全性ってそれぞれ違うし、
スレタイに関係ない話だと思う
0273デフォルトの名無しさん
2011/06/24(金) 17:16:26.83ちょっとでも不利なことになるとすぐこれだw
0274デフォルトの名無しさん
2011/06/24(金) 17:20:04.24強いて言えば、スクリプトってのはむしろ静的言語にエンジン組み込んで動かすものだよね
JavaScriptもサーバで使うようになってきたし。JITも入ってるから静的言語だな
0275デフォルトの名無しさん
2011/06/24(金) 17:20:33.04このスレは、静的/動的両方の言語を安全に使えるPGと、
静的言語(典型的にはJava)しか使えないPGが
意見を戦わせてるんだよ?
0276デフォルトの名無しさん
2011/06/24(金) 17:23:18.97うん。evalについてはね。直接対応する機能が無いのだから当然。
ただ劣るにしても程度問題で、普段滅多に使う場面がないなら劣るに
しても微々たるもの。
>evalだけならともかく、実際には動的言語らしい機能って他にも一杯あるしな。
それも個別に検証しないとね、
0277デフォルトの名無しさん
2011/06/24(金) 17:28:12.76アクセス数の多いサイトを出してくる
動的言語しかつかえないPGと、
静的言語で安全な大規模ソフト作っているPGが
意見を戦わせるスレだろ
0278デフォルトの名無しさん
2011/06/24(金) 17:28:57.930279デフォルトの名無しさん
2011/06/24(金) 17:31:56.90安全なソフトを日々作ってるプログラマなら
テストは書き慣れてるよね?書いてみてよ
0280デフォルトの名無しさん
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.」
でスレタイに反例が存在してることになるので終了ということになる。
0281デフォルトの名無しさん
2011/06/24(金) 17:46:02.02http://ja.wikipedia.org/wiki/Python%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E8%A3%BD%E5%93%81%E3%81%82%E3%82%8B%E3%81%84%E3%81%AF%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E4%B8%80%E8%A6%A7
0282デフォルトの名無しさん
2011/06/24(金) 17:49:48.73ちょこっと拡張用に組み込まれた程度のものが混じっているのな
0283デフォルトの名無しさん
2011/06/24(金) 17:52:07.34英語版の方が多いな
0284デフォルトの名無しさん
2011/06/24(金) 17:53:18.93アクセス数が多いとか商品数が多いWebサイトなのな
0285デフォルトの名無しさん
2011/06/24(金) 17:55:40.35Google 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 の分野でも普通に使われてる
0286デフォルトの名無しさん
2011/06/24(金) 17:56:25.200287デフォルトの名無しさん
2011/06/24(金) 17:56:39.02動的言語の方が実装しやすいとか
馬鹿でも使えるとかそんな理由だろ
0288デフォルトの名無しさん
2011/06/24(金) 17:56:46.08静的厨のいう大規模ソフトってのは
土方を大量に集めて開発したって意味だよね
0289デフォルトの名無しさん
2011/06/24(金) 17:57:15.430290デフォルトの名無しさん
2011/06/24(金) 17:57:44.07>>288
0291デフォルトの名無しさん
2011/06/24(金) 17:58:20.37馬鹿でも使えるって意味ではJava最強
これは褒めてる
0292デフォルトの名無しさん
2011/06/24(金) 17:59:02.410293デフォルトの名無しさん
2011/06/24(金) 17:59:10.580294デフォルトの名無しさん
2011/06/24(金) 17:59:42.75Heskellスクリプトなんて入れたらユーザーは怒るだろ
0295デフォルトの名無しさん
2011/06/24(金) 18:02:59.93まともな設計者なら問題を適切に分解して、大規模じゃないソフトの集合にしてしまうだろうし、
そうなると言語の選択ポイントは「(馬鹿に書かせても)安全かどうか」ではなくなってしまう。
どうせテストはするんだしな。
スレタイの反例も十分出したし、このスレもういらね
0296デフォルトの名無しさん
2011/06/24(金) 18:06:18.87アクセス数やページ数が多いWebサイトだからな
しかもバックエンドに静的言語で作られたソフトを使った
0297デフォルトの名無しさん
2011/06/24(金) 18:07:48.560298デフォルトの名無しさん
2011/06/24(金) 18:10:18.270299デフォルトの名無しさん
2011/06/24(金) 18:10:46.380300デフォルトの名無しさん
2011/06/24(金) 18:12:29.92まあWindows界を筆頭に、1つのソフトに何でも詰め込む設計が跋扈してるからなあ
0301デフォルトの名無しさん
2011/06/24(金) 18:13:46.93中身が何であろうと、SQLを扱う上では動的コードの視点に立たないと穴ぼこだらけになっぞ?
0302デフォルトの名無しさん
2011/06/24(金) 18:24:39.440303デフォルトの名無しさん
2011/06/24(金) 18:25:27.370304デフォルトの名無しさん
2011/06/24(金) 18:34:26.540305デフォルトの名無しさん
2011/06/24(金) 18:34:38.060306デフォルトの名無しさん
2011/06/24(金) 18:37:23.98JDBCで使ったことあるんじゃない?
0307デフォルトの名無しさん
2011/06/24(金) 18:49:02.09SQLに対する理解が足りないのか動的言語に関する理解が足りない
のかはっきりしてくれ。
ぶっちゃげ呼び出し側から見れば動的SQLは普通のクエリ実行よりも
よっぽど静的だ。
0308デフォルトの名無しさん
2011/06/24(金) 18:59:48.820309デフォルトの名無しさん
2011/06/24(金) 19:04:52.51ダメだっていってるひとがいた
0310デフォルトの名無しさん
2011/06/24(金) 19:06:01.170311デフォルトの名無しさん
2011/06/24(金) 19:16:21.84また、ホビー、金融系、Webの緩いのや硬いのでも現実的にテストにさける時間は変わってくるよね。
テストで担保するって話が土台になるならここの前提はとても重要だと思う。
0312デフォルトの名無しさん
2011/06/24(金) 19:19:42.580313デフォルトの名無しさん
2011/06/24(金) 19:31:41.890314デフォルトの名無しさん
2011/06/24(金) 20:41:50.14実験に時間をさく事は現実的ではなくて
しかも「時間のかからない安全策」が現実的だと言いたいのか?
そんな都合の良い現実がどこにあるんだ
0315デフォルトの名無しさん
2011/06/24(金) 20:57:35.17要するに静的だろうとテストはしっかりやらなきゃダメってことだろ
0316デフォルトの名無しさん
2011/06/24(金) 21:02:20.250317デフォルトの名無しさん
2011/06/24(金) 21:25:02.06プログラミングできる環境を提供して欲しくないな。
素人の作ったソースのメンテやらされて大迷惑だよ。
本当に抽象的・数学的思考のできない奴に、コード書かせるなよ。
0318デフォルトの名無しさん
2011/06/24(金) 21:33:29.370319デフォルトの名無しさん
2011/06/24(金) 21:49:01.310320デフォルトの名無しさん
2011/06/24(金) 22:34:16.12なんじゃないの?
0321デフォルトの名無しさん
2011/06/24(金) 23:27:29.97コード修正時のメンテナンスが大変になる。
だからテストもなるべく少なくするほうがいい。
もちろん少なくすると言っても必要なテストを省くという意味じゃないよ。
で、静的言語だとテストの一部を実際に使用するコード側に
移動して減らすことができる(実行前の静的テストに変更できる)
0322デフォルトの名無しさん
2011/06/24(金) 23:30:09.880323uy ◆KOAgYBL/Xg
2011/06/24(金) 23:34:05.36コード触って1〜2年目には誰だって辿り着くもんだぞ
変な書籍が大量にでて、それを読んで凝り固まった考えを流布し始める奴が多いから言葉の定義すら曖昧になって
オブジェクト指向とは一生かかっても誰も習得できない技術となった
0324デフォルトの名無しさん
2011/06/24(金) 23:38:03.510325uy ◆KOAgYBL/Xg
2011/06/24(金) 23:50:05.42新しい画期的な概念がでてくると、「これはオブジェクト指向のひとつだ!」
みたいに言い出す こわい
0326デフォルトの名無しさん
2011/06/25(土) 00:17:21.880327デフォルトの名無しさん
2011/06/25(土) 00:25:32.890328デフォルトの名無しさん
2011/06/25(土) 00:36:40.140329デフォルトの名無しさん
2011/06/25(土) 00:40:18.02OOPLや動的言語がどう内部で処理されてるか理解しない奴は土方。
0330デフォルトの名無しさん
2011/06/25(土) 00:43:44.33それはいいね。
動的言語ばかり使っているやつって
内部実装に無頓着になりがちだから。
数値?文字? そんなのどっちも
変数に入れられるじゃん。みたいな。
0331デフォルトの名無しさん
2011/06/25(土) 00:45:31.190332デフォルトの名無しさん
2011/06/25(土) 00:52:21.940333デフォルトの名無しさん
2011/06/25(土) 00:52:57.330334デフォルトの名無しさん
2011/06/25(土) 00:53:13.31OO プログラミングだけならいわゆる LL とかで、自分で実装してみるのも良いと思う。
0335デフォルトの名無しさん
2011/06/25(土) 00:54:17.370336デフォルトの名無しさん
2011/06/25(土) 01:08:05.43文章が分かり辛くてごめん。
オブジェクトシステムを自分で実装してみる。
0337uy ◆KOAgYBL/Xg
2011/06/25(土) 01:10:20.83内部理解とかもうどうでもいい
ハードを意識してプログラム組む時代は終わった
数値、文字列を、同じ箱に入れられないのはハードウェアの事情なだけで
そのゴミ、ハードウェア上でどのように数値、文字列を表しているかなんて、
それさえもひとつの手法でしかない為、知らなくても別に良い
10年たてば事情が変わってる可能性さえある
最高で完璧で枯れた技術だったら誰もが覚える価値はあるけど、現状そうではないと思う
0338デフォルトの名無しさん
2011/06/25(土) 01:10:41.560339デフォルトの名無しさん
2011/06/25(土) 01:16:50.840340デフォルトの名無しさん
2011/06/25(土) 01:28:56.64自分には>>330 の言う内部実装の知識はないが。
0341デフォルトの名無しさん
2011/06/25(土) 01:35:51.02C++のvtableぐらいはやっとくとすごい有益
0342デフォルトの名無しさん
2011/06/25(土) 05:05:48.23生で使うと内部実装が表に出まくりだな
クラスはパッケージであり、メソッドはパッケージに所属する関数であり
フィールドは単なる連想配列であり、結果として
オブジェクトとはパッケージ情報が付加されただけの連想配列である
…というのがまる見え
0343デフォルトの名無しさん
2011/06/25(土) 05:07:07.39より一般化すれば名前空間ってところか
0344uy ◆KOAgYBL/Xg
2011/06/25(土) 05:57:20.500345デフォルトの名無しさん
2011/06/25(土) 09:48:51.27内部実装見えちゃってるな
0346デフォルトの名無しさん
2011/06/25(土) 09:57:57.05ふーん。不思議なことをいう人だね
ちょっと実例だしてみてよ
0347デフォルトの名無しさん
2011/06/25(土) 11:00:05.60Smalltalkなら1、2年で会得出来るだろうけど
JavaやC#だと下手すると一生解らないだろ
0348uy ◆yyC0rYWEq2
2011/06/25(土) 11:37:03.27それが
> 変な書籍が大量にでて、それを読んで凝り固まった考えを流布し始める奴が多いから言葉の定義すら曖昧になって
といってるんだよ
二度と話かけんなよ
0349デフォルトの名無しさん
2011/06/25(土) 11:50:56.90http://el.jibun.atmarkit.co.jp/rails/2011/06/51000-6676.html
大規模開発www
0350uy ◆yyC0rYWEq2
2011/06/25(土) 12:34:17.800351デフォルトの名無しさん
2011/06/25(土) 12:41:09.86日本だと初心者1000人だけど
0352デフォルトの名無しさん
2011/06/25(土) 12:48:03.07優秀なエンジニア5人は二流1000人を超えるかもしれないけど
でもソフトウェアの多くは、実装が難しくもない簡単な機能。
そんなものは一流のエンジニアでも二流のエンジニアでも
実装時間は変わらん。
分かりやすく例えれば、フランス料理フルコースを作るのに
一般の人がいくら頑張ってもまともに作れないけど、
通常の食事程度、弁当とかなら数が集まったほうが多く作れる。
一流シェフに弁当作らせても1000倍速く作れたりしない。
0353uy ◆yyC0rYWEq2
2011/06/25(土) 13:01:55.57メタには限界なし。
あとは、その5人が、過去に何度か似たようなものを作ったことがあって
ソースコードを流用できる場合とか
1000人のほうは1から作っているのにたいして、5人のほうは過去のソースコードの組み合わせをしていくだけになる
ゼロからソースコードを書いた場合の開発効率とか、そういう次元の話はしてないと思うよそれ言ったヤツ
0354デフォルトの名無しさん
2011/06/25(土) 13:33:52.11少し出てるね、メソッドはフィールドに関数オブジェクト突っ込んだものだし
メソッドが関数だから仮引数としてself渡されたり
ただ、オブジェクトありきの実装だからまだマシかも
0355デフォルトの名無しさん
2011/06/25(土) 15:01:01.91オブジェクト指向の肝はプログラミングじゃなくてモデリングだろwwww
0356uy
2011/06/25(土) 15:16:12.70は?
オブジェクト指向の肝って何だよ?肝いなお前
Object Orientedってのはただの形容詞なんだよ
その後にAnalysisがつこうがDesignがつこうがProgrammingがつこうが何でもありだ
お前は肝いからUMLでお絵描きだけしてろ屑
0357デフォルトの名無しさん
2011/06/25(土) 15:23:33.070358デフォルトの名無しさん
2011/06/25(土) 15:26:14.37>>356
はああ?
>>355
は?
「コード」触ってりゃっていったわけで
お前はもしかして 本 読まないと無理なタイプ?
死ねよゴミ
0359デフォルトの名無しさん
2011/06/25(土) 15:27:02.33副作用、つまり状態を変化させない
関数が流行っている。
オブジェクト指向でも
状態を変更させないように
変化させていくべきだ
0360uy ◆yyC0rYWEq2
2011/06/25(土) 15:29:23.00聖書の書き換えをしながら勢力を大きくしていってる
たちのわるい宗派
0361デフォルトの名無しさん
2011/06/25(土) 16:16:54.26imutableって計算機学の歴史の中でも古くからある概念なんだけどね。
なんで最近まで軽視されてたんだろ。
0362デフォルトの名無しさん
2011/06/25(土) 16:19:46.84まぁ、カプセル化はオブジェクト指向言語の必須条件じゃないからね。
0363デフォルトの名無しさん
2011/06/25(土) 16:33:35.37オブジェクトが変更されないことが明示されてる。
で、これってコンパイル時に分かるわけだが。
0364uy ◆yyC0rYWEq2
2011/06/25(土) 16:34:37.87それにRubyには大文字で変数宣言すると定数になるし
Ruby最強なんだよ ボケナス
0365デフォルトの名無しさん
2011/06/25(土) 16:39:35.08アホだからか
0366デフォルトの名無しさん
2011/06/25(土) 16:43:27.09実行前に教えてくれと思う。
一本道を歩いていたら
行き止まりに、ここで行き止まりですって
書いてあるようなもん。
道の入口に、行き止まりと書いておけ。
0367デフォルトの名無しさん
2011/06/25(土) 16:54:50.91一本道なら、教えてもらわなくても分かる
0368デフォルトの名無しさん
2011/06/25(土) 16:57:14.38あれさえどうにか出来れば、もっと普及できたんだろうけど。
0369デフォルトの名無しさん
2011/06/25(土) 17:21:25.98それ以前に参照でオブジェクトを追跡できなくなるのがまずい。
オブジェクト "ヰ" をポインタ "ゑ" で追跡してたとき、
オブジェクト "ヰ" が意味する値が変化したことを "ゑ" に通知する必要がある。
更に、 "ゑ" もその結果に応じて変化することはできないんで、更に上位の参照体に
"ゑ" が意味する値が変化したことを通知する必要が出てくる。
0370デフォルトの名無しさん
2011/06/25(土) 17:25:14.09int x = 0;
const int &y = x;
std::cout << y << std::endl; # 0
x = 1;
std::cout << y << std::endl; # 1
0371デフォルトの名無しさん
2011/06/25(土) 17:35:22.51それをいうなら、javaでもC#でもconstは用意できる。
interface ConstXxxxxx
{
getYyyyyy();
}
ConstXxxxxxをとる限り実質変更不可能。
そもそもJavaにconstが無いのは、interfaceで実現できるから
なんだがなぁ。Javaの設計者が如何に思考巡らせていたとしても
結局Javaグラマーがアレだからconstが無い不便な言語、
もしくはconstダサい的な流れになっていく。
0372デフォルトの名無しさん
2011/06/25(土) 17:47:06.10何を言ってるのかよく分からない
"ヰ"はオブジェクトじゃなくて変数?
0373デフォルトの名無しさん
2011/06/25(土) 18:28:29.24オブジェクトそのもの。
0374デフォルトの名無しさん
2011/06/25(土) 18:43:49.13type 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に
なった事が判からない。
0375デフォルトの名無しさん
2011/06/25(土) 18:53:31.96http://codepad.org/e4K51sph
0376デフォルトの名無しさん
2011/06/25(土) 19:23:37.92オブジェクトがすべてリスト構造に変換出来るんであれば
ある程度緩和できる話しだけどね。
0377デフォルトの名無しさん
2011/06/25(土) 19:25:23.35オブジェクトそのものが変化するならそのオブジェクトはmutableだし参照元は何もしなくても良いだろ
>>374の例を見ればやっぱり変数の束縛先の変化の事を指してるのかな
immutableオブジェクトの例としてconstを使うのはどうかと思うが
0378デフォルトの名無しさん
2011/06/25(土) 19:26:01.95リストにappendしたり、中の要素を変更したりするだけで
リストの全コピーが発生するのが困るんだが
リスト構造だと何が緩和されるの?
0379デフォルトの名無しさん
2011/06/25(土) 19:32:44.390380デフォルトの名無しさん
2011/06/25(土) 19:44:28.49const type x = ... # immutable object
const type &x = .. # read only reference
0381デフォルトの名無しさん
2011/06/25(土) 20:04:09.85変更後のオブジェクトは変更したメンバーだけ持って、
変更前のメンバーは前のオブジェクト参照すればいいでしょ。
0382デフォルトの名無しさん
2011/06/25(土) 20:28:29.53だからリストのコピーが発生してるじゃん
0383デフォルトの名無しさん
2011/06/25(土) 21:19:06.65コンパイル時に型チェックできないならSQL使わないんだよな?
0384デフォルトの名無しさん
2011/06/25(土) 21:29:17.35ストアド使うか、カプセル化してチェックするっていうのは基本だが。
0385デフォルトの名無しさん
2011/06/25(土) 21:32:21.36SQL文のプリコンパイルの事を言っているのか、静的言語からSQLを
呼び出すときのことを入っているのかはっきりしてくれ。
そもそもコンパイル時に型チェック出来ないなら使わないなんて誰が
言ったんだ? 勝手に話を面白くするな。
JavaもC++もRTTIはそれなりに使うぞ?
0386デフォルトの名無しさん
2011/06/25(土) 21:38:19.060387デフォルトの名無しさん
2011/06/25(土) 21:40:46.891.テストを書かないと、バグがあることがわからない。
2.テストを書かなくても、バグがあることが分かる。
この二つの状態。
2の方が優れているのは言うまでもない。
0388デフォルトの名無しさん
2011/06/25(土) 21:45:40.20SQLに限らずホスト言語と組み込み言語の間の型マッピングは手動の
事が多いから、そりゃコンパイラで捕らえられないマッピング間違い
もあるだろうさ。
で、それがどうかしたの?
何のためのテストだと思っている?
0389デフォルトの名無しさん
2011/06/25(土) 21:46:59.710390デフォルトの名無しさん
2011/06/25(土) 21:52:01.38テーブルのスキーマを変えたとき、たとえば
フィールドの型を変えたり項目を減らしたりしたとき、
そのフィールドを参照しているコードを
検出できたらいいとは思うよね。
0391デフォルトの名無しさん
2011/06/25(土) 21:52:40.01バグの種類によるだろ
0392デフォルトの名無しさん
2011/06/25(土) 21:53:26.69求めるも、「動的SQL」云々と口走った以外は音沙汰無しなのだが。
どこに行った?
0393デフォルトの名無しさん
2011/06/25(土) 21:56:08.37でも結局テスト書くよね?
静的だろうが動的だろうが。
0394デフォルトの名無しさん
2011/06/25(土) 21:56:53.83null 許容型 (C# プログラミング ガイド)
null 許容型は、System.Nullable 構造体のインスタンスです。
null 許容型は、基礎となる値型の通常範囲の値だけでなく、null 値も表すことができます。
たとえば、Nullable<Int32> ("Int32 の Null 許容" と読みます) には、-2147483648 から
2147483647 の任意の値、または null 値を割り当てることができます。
Nullable<bool> には、true、false、または null の値を割り当てることができます。
数値型と Boolean 型に null を割り当てる機能が便利なのは、値を割り当てることができない
要素を含むデータベースや他のデータ型を処理するときです。
たとえば、データベースの Boolean フィールドには、値 true または false を格納するか、未定義にすることが可能です。
0395デフォルトの名無しさん
2011/06/25(土) 21:58:41.70> でも結局テスト書くよね?
> 静的だろうが動的だろうが。
まさか屁理屈いおうとしてないか?
テストにはいろんな種類があって、
そのうちの型チェックに関する部分のテストは
静的言語では書きません。
お前は、それ以外のテストを書くから
テストは必要だという、屁理屈に
つなげようとしていると見た。
0396デフォルトの名無しさん
2011/06/25(土) 22:02:39.47一つの言語内の問題ではなく異なる言語間のブリッジの問題だからね。
ぶっちゃげ静的動的はあまり関係ない。
データマッピングを間違えたところで静的型付けだとデータ変換時に
例外吐くのが動的型の場合はその後のロジックでエラーを引き起こす、
その程度の違いでしょ。
0397デフォルトの名無しさん
2011/06/25(土) 22:25:42.60> その程度の違いでしょ。
それが怖いんだよ。
その後のロジックでエラーを引き起こすということは、
エラーを引き起こすロジックを実行しない限り
エラーがあることが分からないってこと。
こんな状態は想定外でしたという
システムトラブルの記者会見はこうやって起こる。
0398デフォルトの名無しさん
2011/06/25(土) 22:30:04.19function 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に限らず大抵の言語は同じようにできる。
0399デフォルトの名無しさん
2011/06/25(土) 22:33:13.14やりたくない。
引数、もしくは関数にconstって付けたら
この関数を実行しても
この引数、オブジェクトは状態を変えません。
変えようとするコードを書いたら
コンパイルエラーになります。
って方が何倍もよい。
0400デフォルトの名無しさん
2011/06/25(土) 22:35:42.33関数型言語ですね
0401デフォルトの名無しさん
2011/06/25(土) 22:43:31.58いや動的型付けだろうと型変換に失敗したら例外吐くぞ
まさか動的型だと変換すらしないと思ってる?
0402デフォルトの名無しさん
2011/06/25(土) 23:03:48.18如何にコピーコストを抑えるかっていう、それとは別問題の事を書いたんだけど。
0403デフォルトの名無しさん
2011/06/25(土) 23:07:54.69C++でRTTI使いまくるのは設計がダサい証拠、って俺の師匠が言ってた
0404デフォルトの名無しさん
2011/06/25(土) 23:10:23.21動的言語でも型変換はするでしょ。ただJDBCやDBIなどの低水準のDB接続APIに
関して、動的言語の場合はAPIの実装が結果テーブルのメタデータ読んで自動的に
適切な型変換をするので、APIを叩く利用者側ではカラム値を引っ張ってくるのに
特に型指定する必要が無い場合が多いよね。型指定しなくても常に成功する。
静的言語の場合は多くはgetStringみたいに型指定されたメソッドを叩く必要が
あるし、正しいメソッドを利用しないとカラム値を引っ張った時点で例外を吐く。
動的言語ではノーエラーでカラム値を引っ張れるとしてもそれが想定した型の値
でないと後のロジックで破綻するから、結局静的型と同様に型の検証とかDAOの
テストを書いたりする必要がある。
要するにSQLとかDBアクセスが安全か否かに関して静的動的云々はあまり関係
が無くて、結局テストを書かないといけないという事。
0405デフォルトの名無しさん
2011/06/25(土) 23:20:43.090406デフォルトの名無しさん
2011/06/25(土) 23:28:56.26ちゃんと型チェックしてくれるぞ。
0407デフォルトの名無しさん
2011/06/25(土) 23:34:04.380408デフォルトの名無しさん
2011/06/25(土) 23:35:51.98いや、それだけの話なら、正しいスレタイは
「動的言語は型チェックのテストコードを書くから面倒」
じゃないかなと。
0409デフォルトの名無しさん
2011/06/25(土) 23:37:44.68> 結局テストを書かないといけないという事。
うん、結局という話にするから
おかしくなっちゃうんだよ。
飛行機で行っても、船で行っても
結局、アメリカにつくだろう?
結局、アメリカにつくから同じだと思うか?
問題は結局という最終的な結果じゃなくて
そこに辿りつくまでの話よ。
同じ結果になるのなら、楽な方がいいだろう?
問題は早く見つかるほうが楽だよ。
0410デフォルトの名無しさん
2011/06/25(土) 23:44:58.34それってAPIの問題な希ガス
0411デフォルトの名無しさん
2011/06/26(日) 00:01:09.73あ〜基本的に自分は>>383とか>>386をピンポイントでdisりたいので
あって静的言語を叩いたり動的言語を持ち上げたりその逆をしたりする
意図はないから。
ただSQLの呼び出しに関連した問題は本質的には異なる言語とのブリッジ
にまつわる問題であって静的動的云々の言語の違いはそれと比べれば副次
的なものだと考えている。
>>410
うん。APIの問題なんだよ。言語はあまり関係ない。
内部で型変換するAPIが多い動的言語もユーザが型指定する必要のあるAPI
が多い静的言語でも発生箇所が異なるだけで問題は結局発生するのだから
(繰り返すけど言語ブリッジの問題だから)、静的動的云々は安全性の問題
にはあまり関係がないと思う。
静的型にしても例えば文字列型のカラム値をgetDoubleで取りに行って
例外を吐くかは実行時にしか解らないわけで、結局テストを書くしかない。
0412デフォルトの名無しさん
2011/06/26(日) 00:22:46.21■スキーマの検証
モデル・クラスがLINQ to SQLデザイナを使用して定義されたとき、
データモデル・クラスにあるプロパティのデータ型は、
そのデータベース・テーブルのデータ型に対応します。
例えば、もしDinnersテーブルの“EventDate”列が“datetime”の場合、
LINQ to SQLが作成したそのデータモデル・クラスは“DateTime”
(これはビルドインの.NETデータ型です)に型付けされます。
つまり、それに対してコードからint型やbool型を割り当てようとした場合には
コンパイル・エラーになり、実行時に無効なstring型をそれに明示的に変換しようとした場合には、自動的にエラーが発生します。
^^^^^^^^^^^^^^^^^^^^^^^^
0413デフォルトの名無しさん
2011/06/26(日) 00:36:39.11それは静的言語が偉いと言うよりもまずO/Rマッパが偉いんだと思うw
テーブルスキーマとデータクラス等々の定義を自動で同期するんだよね。
ただデータクラスに正しくマッピングされれば後は静的言語の型検証を
有効に活用できるというわけで、確かに静的型の方が有利だな。
0415デフォルトの名無しさん
2011/06/26(日) 01:22:49.02rubyはもういいよw
選択肢外だから話題に出さないで
邪魔くさい
0416uy ◆yyC0rYWEq2
2011/06/26(日) 01:26:58.51http://glossary.tank.jp/t0823.html
この人がさ
2000年の時点でこれ言ってんだよね
残念だけど2011年になって、外国からの書籍も日本も来るようになっても、
お前みたいなおばかはいるみたいで。。。
0417デフォルトの名無しさん
2011/06/26(日) 01:28:59.020418uy ◆yyC0rYWEq2
2011/06/26(日) 01:30:04.37で、選択肢は何をもってんだ?
Rubyと同等に見れる可能性のある言語って、Python,Lispくらいなんだけど
まさかPerlとかゴミHaskellをだしてくるわけじゃないだろうな
PythonとLispはそのどちらも、日本語資料がとぼしく、一部の奴が好んで使ってるだけで
特に大学でPythonなんて教えてるとこよりはRuby教えてるところのほうが多いと思うが
動的言語でRubyという選択肢を除外なんて、何をいっているのやら。知ったか君は邪魔だから 消えてくれ
0420デフォルトの名無しさん
2011/06/26(日) 01:32:39.230421デフォルトの名無しさん
2011/06/26(日) 01:33:35.43どうぞどうぞ、固執してなさい
でも邪魔くさいからrubyの話題を持ってくるのはやめてね
わかった?
0422デフォルトの名無しさん
2011/06/26(日) 01:34:08.31Ruby
【プログラミング】
・まつもとゆきひろ氏が開発している、日本生まれのオブジェクト指向スクリプト言語。
・その強力な機能と最初から日本語の資料が整っている事からすれば、生まれ故郷の日本ではもっと普及しても
良さそうなものだが、拝外思想の持ち主で遠く太平洋をはさんだアメリカばかりに気を囚われて、
足元で起こっている変化に気付かない多くの連中には、当分気付かれ、受け入れられそうも無いもの。
・「当分」が解けるのは、アメリカで「Ruby」の本が出版され、それが日本で翻訳される頃あたり;-p
2001/01/01更新
0423デフォルトの名無しさん
2011/06/26(日) 01:35:20.63かまってちゃんが攻撃的なのはよくあること
普通のこと
普通のかまってちゃんが普通の行動をとってるだけ
0424uy ◆KOAgYBL/Xg
2011/06/26(日) 01:35:37.22感がいいの?
>>421
おkwwwwwww っじゃwwお前は一生Ruby使うなwwwwwww 絶対に使うなよ?
使ったらお前の「負け」でwwwwwwwwwwwwwwwwwwwww
使うなよ?
人が親切心でおしえてんのにねw
0425デフォルトの名無しさん
2011/06/26(日) 01:35:46.640426デフォルトの名無しさん
2011/06/26(日) 01:37:01.44そんなもん持ち出さなくても、rubyは十分に普及してるじゃん
ゴミの割にはよくやってるよ
0427デフォルトの名無しさん
2011/06/26(日) 01:37:28.310428デフォルトの名無しさん
2011/06/26(日) 01:37:56.79なんだ、ただのガキか
0429デフォルトの名無しさん
2011/06/26(日) 01:39:44.92英語読めないなんて軽蔑するけど、まあ馬鹿にもプログラミングする権利はあるしな
0430uy ◆KOAgYBL/Xg
2011/06/26(日) 01:43:43.71ゴミ乙
>>429
まだそのフィールドにいるんだ
じゃあお前なんでこの板にいるわけ? 英語が読めるんだったら海外bbsいってろハゲ
在日ではなく日本人だったら日本語が読みやすいのは当たり前なんすけどーwwwwwwwwwwwwwwww
読めるか読めないかじゃなくて
学習速度のこといってんだわwwwwwwwwwwwwwwww
学校の教科書を全部英語でかかれてんのとお、www 日本語でかかれ店のどっちがいいですかあああ??w?Ww?Www
0431デフォルトの名無しさん
2011/06/26(日) 01:46:23.470432デフォルトの名無しさん
2011/06/26(日) 01:47:01.33そしてソフトウェアシステムのある種のダイナミックな変更のパターンが不可能になることである。
しかし、こういった議論は、冗長で柔軟性が低いと感じられる特定の型システムに対する反対にしかなっておらず、
静的な型付けという一般的な思想に反対するものにはなっていない。
たとえば、Smalltalkの発明者であるAlan Kayは、こう言ったことがある。
「私は型に反対しているわけではない。『完全な苦痛』にはならないような型システムを見たことが無いので、
動的な型付けを支持しているのである」
0433uy ◆KOAgYBL/Xg
2011/06/26(日) 01:47:37.08だから
だから
【現象】
・おそらく、海馬がイカれていて記憶を留める事ができない上に、前頭葉と側頭葉が魚並みに退化してしまった人種なんだろうけれど、それを差し引いたとしても込み上げて来る感情を我慢できずに吐き出してしまう言葉。
・今日もどこかで聞こえる怒りの声。 「だぁ〜かぁ〜らぁ〜(怒)」
http://glossary.tank.jp/t0629.html
だからさぁ 、、 そうかそれなら国へ帰れ
0434デフォルトの名無しさん
2011/06/26(日) 01:48:34.94日本語のほうが読みやすい?
他に選択肢ないくせに、なにが日本語の「ほうが」だよww
0435デフォルトの名無しさん
2011/06/26(日) 01:50:26.970436デフォルトの名無しさん
2011/06/26(日) 01:51:15.950437デフォルトの名無しさん
2011/06/26(日) 01:52:15.63「単体テストならもっと広い範囲のエラーを検出できるのだから、
わざわざ静的型システムを使う必要は無い」とまでいう人々もいる。
私たちは、このような議論には見落としがあると思う。
確かに、静的型システムは単体テストの代わりになるわけではないが、
プログラムの性質を確認するために普通なら必要だった単体テストの数を減らしてくれる。
さらに、単体テストは静的型付けの代わりにはならない。
エドガー・ダイクストラが言ったように、テストが証明できるのはエラーの存在であって、
エラーの不在ではない。静的型付けが与えてくれる保証は単純なものかもしれないが、
どれだけテストをしたとしても得られない本物の保証なのである。
0438デフォルトの名無しさん
2011/06/26(日) 01:55:19.95日本語が不自由なやつだな
0439デフォルトの名無しさん
2011/06/26(日) 02:00:42.89> 静的な型に対する最も一般的な反対論は、プログラムを無駄に長くして、プログラマーが自分の思考を表現するうえで妨げになること、
それはお前の思い込みでしか無いよ。
0440デフォルトの名無しさん
2011/06/26(日) 02:01:26.34めんどくさいと言ってやらないやつは
テストもめんどくさいと言ってやらないんだろう。
0441デフォルトの名無しさん
2011/06/26(日) 02:02:43.37型書いとくと
あとで楽になる。
日本にはいいことわざがあるよ。
0442uy ◆KOAgYBL/Xg
2011/06/26(日) 02:03:42.32はっああァァアアアアアアァァ?????????????????
railsとか、日本語だとおもってんの?wwwwww
ocraとか英語ドキュメントしかないけど、俺はその英語ヘルプ読んで使えるようになったんですけどぉぉwwwww
Rubyは日本語資料も多くwww英語資料も多いんだよwwwwwwwww両方wwwwwwwwwwwwwwwwwwwwwwwwwwwww
0443デフォルトの名無しさん
2011/06/26(日) 02:04:25.57本心が透けて見えてるよ
0444デフォルトの名無しさん
2011/06/26(日) 02:09:21.65まぁ、似たような基地外が立てたこのスレで言うのも何だけど。
0445デフォルトの名無しさん
2011/06/26(日) 02:10:29.800446uy ◆KOAgYBL/Xg
2011/06/26(日) 02:11:18.45たったの3行に
めんどくさい をって単語が2個もヒットしたね。
p"ぶっちゃけ、型を定義する程度の簡単なことを
めんどくさいと言ってやらないやつは
テストもめんどくさいと言ってやらないんだろう。
".scan(/めんどくさい/).size
# => 2
0447デフォルトの名無しさん
2011/06/26(日) 02:16:17.400448デフォルトの名無しさん
2011/06/26(日) 02:30:13.90報われている気がする。動的言語向けのIDEも頑張ってはいるけれども、やはり
補完の精度では型情報を使って候補を絞り込める静的言語には敵わない。
他にも最近のIDEは型の妥当性をコーディング時にリアルタイムで検証するから、
間違った型への代入等々はそれこそビルド"前"にエラーとして警告される。
これもポカよけとして非常に有用。
ActionScriptなんかは動的型のAS2からAS3に移行するに当たって静的型を、
それも動的型も併用可能という形で導入したのだけれども結局はあっという間に
型付きでのコーディングが多数派となった。
そんなに動的型が本質的に優れているのであれば開発者の多数は動的型での開発
に留まったと思うのだけれども当時のFlexBuilderとか使っていれば型付きでの
コーディングの効率の良さは明らかだったからね。
静的型を導入してもそのデメリットは十分に補うことが出来るという良い事例。
0449デフォルトの名無しさん
2011/06/26(日) 02:32:34.43コード補完してくれるし
正しい位置にジャンプしてくれるし。
コード書いているときに思考を邪魔されたくないから
適当な変数名付けることってない?
俺その場ですぐに適切な変数名ってつけられないんだよね。
だって俺の思考はすでにもっと先のコードを書いているから。
0450デフォルトの名無しさん
2011/06/26(日) 02:37:48.08グラフィック中心のFLASH使いは動的な書き方が多いけど
FlashDevelop使うような連中はJava風な書き方になってるね
0451uy ◆KOAgYBL/Xg
2011/06/26(日) 02:38:03.18はぁ?
型については、
まともなリファクタリングしたことあればわかると思うけど
一度つくった設計そのものをかえるようになりファクタリングするときって
静的言語じゃ絶望的だぞ
引数、戻り値、をそれぞれかえるのと他に、 型情報までかきかえなきゃならなくなるんだから
小規模ならまだしも、
もし大規模なプログラムで根幹からちょっと仕様変更しなくちゃならなくなったときは
下手に設計していると頓挫して空中分解
そういうところから炎上やデスマになってると思うんだよね
0452デフォルトの名無しさん
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/
結城 浩
0453デフォルトの名無しさん
2011/06/26(日) 02:44:40.88これははずかしい
0454デフォルトの名無しさん
2011/06/26(日) 02:46:55.320455デフォルトの名無しさん
2011/06/26(日) 02:52:11.210456デフォルトの名無しさん
2011/06/26(日) 02:52:14.36はぁ?
最近のIDEでまともなリファクタリングをしたことがあるなら判ると思うけど、
抽象クラスのメソッドシグネチャを書き換えると具象クラスのそれも自動的に
書き換えたりと、レキシカルに特定出来るところは自動的に書き換えるのは
普通だし、書き換えの副作用の範囲が即座に型エラー等として見て取れる
あたりはより「安全」だぞ。
動的型の場合「根幹からちょっと仕様変更」したときにその副作用の範囲を
どう特定するのか是非ノウハウを聞かせてもらいたいものだ。
0457デフォルトの名無しさん
2011/06/26(日) 02:52:22.07それぐらいだったら、元のコードの横に(レイヤー的に)増設したほうがましだ。
0458デフォルトの名無しさん
2011/06/26(日) 02:53:23.810459デフォルトの名無しさん
2011/06/26(日) 02:54:38.44それをどうにかする方法はないか。
そこからリファクタリングという技術が
生まれたことを知らないのか?
>>457
お前はまだ、リファクタリングの入り口にすら
たどり着いていない。
0460デフォルトの名無しさん
2011/06/26(日) 03:01:00.53あと、多分勘違いされてると思う。俺の方は、標準ライブラリに依存した
箇所さえ動作を変えるような方法だ。
そもそもあなたのリファクタリングは、何のためのリファクタリング?
0461デフォルトの名無しさん
2011/06/26(日) 03:02:46.19具体例。
0462デフォルトの名無しさん
2011/06/26(日) 03:06:03.52正しくリファクタリングなのであれば、
普通テストを書いているので型エラー以外も含めて特定可能。
0463デフォルトの名無しさん
2011/06/26(日) 03:06:17.72なんのためのリファクタリングかって?
それ、リファクタリングの本の最初の方に答えが書いてあるよ。
Java言語で学ぶリファクタリング入門より
リファクタリングの目的
「バグとり」や「機能追加」はリファクタリングではありません。
それではリファクタリングの目的はなんでしょうか?
リファクタリングには次のような目的があります
◆バグを見つけやすくする
「バグとり」その者はリファクタリングではありません。しかし、リファクタリングを行うと
プログラムが整理され、潜んでいるバグを見つけやすくなります。
略
◆機能追加しやすくする
「機能追加」そのものはリファクタリングではありません。しかしリファクタリングを行うと
プログラムに新しい機能を追加しやすくなりますs。
略
◆レビューしやすくする
0464デフォルトの名無しさん
2011/06/26(日) 03:06:23.64>そもそもあなたのリファクタリングは、何のためのリファクタリング?
「現在の実装の振る舞いを変えずに」コードの可読性保守性を上げたり
パフォーマンスを上げるためにコードを書き換えること。
リファクタリングとはそういうものだと思うが違うの?
0465デフォルトの名無しさん
2011/06/26(日) 03:06:57.68それさえチェックされれば満足なのかよと言いたいが。
0467デフォルトの名無しさん
2011/06/26(日) 03:12:00.89リファクタリングを行うために
「テストを書く」という準備をする必要がある。それも正しいけど、
「型をちゃんと書く」という準備をすることも正しいよ。
テストだけが、リファクタリングで動作に変化が起きていないことを
証明する方法じゃないということ。
コンパイラ・IDEの力を借りて自動的に行うこともできる。
テストはテストから漏れている部分、つまりバグがある箇所は
特定不可能だからね。
0468デフォルトの名無しさん
2011/06/26(日) 03:13:05.65お前の俺俺定義はどうでもいいよ。
リファクタリングの本に、なにがリファクタリングかはちゃんと書いてあるから。
0469uy ◆KOAgYBL/Xg
2011/06/26(日) 03:14:24.94おまえ、すっげーゴミ本読んでるんだな
著者だれの本読んだ?w
できればその著者のかいたソースコードも乗せてくれよ
リファクタリングほど個人差の出るものねーから
0470デフォルトの名無しさん
2011/06/26(日) 03:14:43.59http://www.refactoring.com/catalog/index.html
この中に含まれているものは
リファクタリングです。
0471デフォルトの名無しさん
2011/06/26(日) 03:14:49.99修正対象部分の動作を合わせていく。
そして、新しいクラス群は、修正対象をAdapterに隔離し、
修正対象から依存性を切り離す。
インターフェース的には古いクラスの中に介入できるので、
古いクラスの動作も改善できる。
要するに関数型な考え。で、あなたのリファクタリングは根本的に変えるんだよね何がしたいの?
class XxxxxAdapter implments RefactorInterface
{
private OldType oldType;
public XxxxxAdapter(略) {略}
public Type Yyyyy(NewType xxxx)
{
return oldType.Yyyyy( convert(xxxxx) );
}
}
0472デフォルトの名無しさん
2011/06/26(日) 03:15:15.06何で動的厨は勝手に話を膨らませて面白おかしくするんだ。
誰が「型エラーさえチェックされれば満足」なんて言った?
誰もそんなことは言っとらん。
>>466
お前もだ。誰が「これでだけで出来る」なんて言った?
リファクタリングの基本はあくまでテストで、IDEの自動書き換えも型エラーも
リファクタリングをサポートする「便利機能」に過ぎないよ。
しかし動的言語ではこれらの「便利機能」の実装すらかなりプアな状況にあると
いうのが俺の認識なんだが、違う?
0473デフォルトの名無しさん
2011/06/26(日) 03:15:28.66英語だよ。大丈夫?
http://www.refactoring.com/
0474uy ◆KOAgYBL/Xg
2011/06/26(日) 03:21:17.10ソースコードのリンクを載せろ
それ以外は読まない
bifoar
after
ってリファクタリング本なら、あるだろ
もしないならゴミ本決定
0475デフォルトの名無しさん
2011/06/26(日) 03:21:45.96そもそもお前自身がメソッドシグネチャの書き換え程度の話しか出して
いないだろw 自分で>>451を読み返せ。
他人を笑う前に自分の後出しジャンケンを笑えよw
0476デフォルトの名無しさん
2011/06/26(日) 03:22:46.28「バグとり」その者はリファクタリングではありません。しかし、リファクタリングを行うと
プログラムが整理され、潜んでいるバグを見つけやすくなります。
略
◆機能追加しやすくする
「機能追加」そのものはリファクタリングではありません。しかしリファクタリングを行うと
プログラムに新しい機能を追加しやすくなりますs。
略
そうだろ。やりたいのはコレだろ。でも現実問題、自社のライブラリやら、社外のライブラリを
直接いじる事はできないんだ。だから、変更したい箇所にAdapterやらBridgeを噛ませて動作を整えるしかないんだ。
現状、自分で修正可能なプロジェクトの範囲なら、リファクタリングツールで十分だけどな。
0477uy ◆KOAgYBL/Xg
2011/06/26(日) 03:23:39.03はっああぁlっぁアァァアアアアア??????????????????
根底からって言ってるのにどうよんだらそうなるわけ?
勝手に俺のレスのいいたことを読み間違えてる分際で?
死ねおyゴミんm
0478デフォルトの名無しさん
2011/06/26(日) 03:25:09.93そういうのは真ん中のを一番下に持ってこなきゃ
0479デフォルトの名無しさん
2011/06/26(日) 03:25:50.73"bifoar"って思わずググってしまったじゃないか。笑わせんなw
とりあえずuy ◆KOAgYBL/Xgは英語も読み書きできず豊富なUML図を
用いた説明も読んで理解出来ないという事はよく解った。
0480デフォルトの名無しさん
2011/06/26(日) 03:27:21.17だから「根底」の例を出せよ。具体例を。
基底クラスのメソッドシグネチャ書き換えかw
0481デフォルトの名無しさん
2011/06/26(日) 03:29:28.07機械にやらせるもんじゃない。
アセンブラも同じだ。
ハンドアセンブル最高!
0482デフォルトの名無しさん
2011/06/26(日) 03:31:13.72だって型チェックの話ばかりじゃん。
動的型言語では型チェックを一々テストでも書かないよ。考え方が違うから。
特定のクラスのインスタンスを渡さないと動かないことを強制するんじゃなくて、特定の振る舞いを持つなら良しとする。
パターンやGenericsを駆使しなくても、その言語の普通の書き方で十分な拡張性や柔軟性がある。
自分の足を打ち抜くのが怖い人はJava使ってれば良い。
0483デフォルトの名無しさん
2011/06/26(日) 03:31:52.87> 直接いじる事はできないんだ。だから、変更したい箇所にAdapterやらBridgeを噛ませて動作を整えるしかないんだ。
そのAdapterやらBridgeを半自動で
作成してくれるんだよ。Eclipse+Javaは。
これはリファクタリングではないが、静的言語ならではの
コンパイラのコード理解力
0484デフォルトの名無しさん
2011/06/26(日) 03:33:00.220485デフォルトの名無しさん
2011/06/26(日) 03:34:46.17別に、静的がいいだの、動的がいいだの俺は書いてないんだけどな。
0486uy ◆KOAgYBL/Xg
2011/06/26(日) 03:35:20.97A構造体の引数をとって、A構造体を返す。 みたいな関数が多くなってくるとおもうんだけど
あれって結局、型をなくしたいんだよ
仕様変更に強くする為には、そうするしかない
第一引数にint 第二引数にstring 第三引数に... っていう感じじゃなくて
構造体.int =5
構造体.string ="aa
function( 構造体 ) ;
こう。
あと、Rubyだとハッシュ引数というのがあって
function({ :int => 5 , :string => "aa" })
こういうのをやってる
こういう手法が、良いとされるって事は、もう結論出ちゃってるじゃん・・・、
動的言語はこの手のことをすべての箇所でやれるが、
静的言語は、ライブラリやロジックのすべての箇所でやるのは無謀
結局、普通にfunction( 1, "aa" , :test ); ってな具合に引数を渡してる関数も出てくるわけで
そ こ が リファクタリングの為に要する時間を増やすことになる
0487uy ◆KOAgYBL/Xg
2011/06/26(日) 03:36:52.89へえぇ?? まずそっからなんかwwwwwwwwwwwwww
Aプログラムを納品し、似たような機能のBプログラムを作らなくちゃならなくなったとき
Aプログラムの設計はもうズタズタだから、最初から書き換えましょう とかそういう場面だよ
0488デフォルトの名無しさん
2011/06/26(日) 03:37:36.77> あれって結局、型をなくしたいんだよ
いや、単に「引数オブジェクトの導入」という
リファクタリングを実践しているだけ。
0489uy ◆KOAgYBL/Xg
2011/06/26(日) 03:38:41.19だからねぇ・・・リファクタリングって、個人の能力が如実に表れるものであって、
おまえにとってその本が良書でも、万人にとってはそうではなく
その著者よりもレベルの高いリファクタリングが可能なやつはごまんといるわけだ
よくそんな「ゴミ本よんでます」なんて公言できますね、
多分おまえ、一定レベルの技術者からは覚めた眼で見られているタイプ、
一定レベル以下の初心者からは、先生(笑)とかってよばれるかもなw 最初の1年だけ・・・
0490デフォルトの名無しさん
2011/06/26(日) 03:41:54.77個人の能力が現れないものがあったら教えてくれ(大爆笑w
0491デフォルトの名無しさん
2011/06/26(日) 03:42:32.18Java + Eclipseしか使ったことは無いの?
3Dデータ変換から、音声生成、マルチメディアとWebシステムとの接続とか
そういう環境じゃ、言語がどうの環境がどうのとか些細すぎてどうでもいい。
言語や環境にとらわれず、どの状況でも応用効かせられる方法をもたなきゃやってられん。
0492uy ◆KOAgYBL/Xg
2011/06/26(日) 03:42:43.12何同じこといってんの?
たとえばRuby処理系にしてみれば VALUEって構造体がそれにあたる
静的言語だから、ああいういろんな場所で使う共通の構造体を作る( しかない。 )
動的言語だと、そのVALUEの定義すら省く
あとそんな当たり前のやり方にたいし「引数オブジェクトの導入」 とかリファクタリングとかいわれてもこまるwwwwww
あの程度、最初の設計段階でかけていなければならないものであって、リファクタリングしてない
0493デフォルトの名無しさん
2011/06/26(日) 03:43:32.54>だって型チェックの話ばかりじゃん。
〜〜〜〜〜〜〜〜〜 深 い 谷 〜〜〜〜〜〜〜〜〜〜〜
>それさえチェックされれば満足なのかよと言いたいが。
この二つの間の論理の飛躍、というか決めつけに気がつかないのであれば
もう何も言うことはない。型の話が多いのは認めるけど、それだけで満足
しているかはまた別問題だろう。
あと静的な型チェックの話は静的言語にあって動的言語には無いメリット
だから、静的厨にとっては話しやすいネタなんだよな。
他の差異、例えばより柔軟なリフレクションやevalの類などは動的言語に
あって静的言語には無いものだから、動的側から話を振ればよい。
> 自分の足を打ち抜くのが怖い人はJava使ってれば良い
自分は怖い人だからそうするわ。
ただ俺が作った銃で他人様が足を打ち抜く例もあるわけで。
0494デフォルトの名無しさん
2011/06/26(日) 03:44:59.39リファクタリングを分かってない。
本当にすごい物ってのは、
基本なんだよ。なんでもそうだ。
0495uy ◆KOAgYBL/Xg
2011/06/26(日) 03:49:05.31如実の意味でもググってきたら?
文章よめないのか? あー日本語よめねーのか、なるほどな
日本語コンプレックスのせいで英語俺よめるぜ(キリ)みたいになってんだ(笑)
個人の能力があらわれないもの
そりゃ、おまえが普段かいてるコードそのものだよwwwwwwwwwwwwwwwwwwwwww
土方のかいてるソースコードに「 個人の能力 」なんて誤差の範囲なんだけどwwwwwwwwwwwwww
何かを勘違いしちゃっていたの???
0496デフォルトの名無しさん
2011/06/26(日) 03:49:19.98>Aプログラムの設計はもうズタズタだから、最初から書き換えましょう
>とかそういう場面だよ
それリファクタリングと違う。そもそもだな。
>>451
>もし大規模なプログラムで根幹からちょっと仕様変更しなくちゃならなくなったときは
元々言っていたことと全然話が変わっているだろう。
0497デフォルトの名無しさん
2011/06/26(日) 03:51:10.67ほっとけよ精神薄弱者なんだから。
0498デフォルトの名無しさん
2011/06/26(日) 03:54:30.30> 個人の能力があらわれないもの
> そりゃ、おまえが普段かいてるコードそのものだよwwwwwwwwwwwwwwwwwwwwww
コードこそ、個人の能力が一番現れるもんだろ。
その証拠にさっきお前もソースコード要求していただろ。
個人の能力がどうとかいって。
0499uy ◆KOAgYBL/Xg
2011/06/26(日) 03:56:05.70ハッァアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwww?Wwwwwww
おまえ、マジでど素人だろ
プログラミングさえ満足にできない奴って生きてて恥ずかしくないの?????????ww
>>498
はぁあ??????
??WwW?W
俺が要求していたのはそのコードじゃないのでwwwwwさっきから脳内妄想激しすぎwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
0500デフォルトの名無しさん
2011/06/26(日) 03:57:12.350501デフォルトの名無しさん
2011/06/26(日) 03:57:18.14というか>>499を見る限り、精神薄弱を演出して逃げに入りましたな。
0502デフォルトの名無しさん
2011/06/26(日) 03:57:24.76840 名前: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関数っていうのは、自分の持ってるタスク以下の正規表現にマッチするシンボルのタスクを全部検索する感じの関数
0503デフォルトの名無しさん
2011/06/26(日) 03:59:23.460504デフォルトの名無しさん
2011/06/26(日) 04:01:28.92全ソースコードは常に修正可能だし
もてる時間を全部つぎ込んで一から書き直してもモーマンタイw
0505デフォルトの名無しさん
2011/06/26(日) 04:03:06.19うむ。
コードは一番能力の差が出るところだな。
0506デフォルトの名無しさん
2011/06/26(日) 04:07:21.10てか、静的動的云々語る前に、オプソのコード眺めるなりして、
コードの書き方勉強すべきじゃね?一部だけ観て全体を見れてないだろ。
0507uy ◆KOAgYBL/Xg
2011/06/26(日) 04:07:52.65それをだしてきたかww もっと貼っていいよそれ
わかる奴にはわかるソースコードのはずだから どんどん貼れ?
>>わかる奴へ
それをみてわかるように、俺はもうリファクタリングがどうのってフィールドにはいない
少し戯れをしているだけ
0508デフォルトの名無しさん
2011/06/26(日) 04:11:32.48基地外が誰かを。
文句を言ったやつだ。
0509デフォルトの名無しさん
2011/06/26(日) 04:13:00.22自分からリファクタリングの話を振っておいて、気がついたら
自ら異次元に旅立ちおったwwwww
ではわかる奴の点呼をとろう。
uy ◆yyC0rYWEq2さんの理解者は挙手だ!
0510デフォルトの名無しさん
2011/06/26(日) 04:13:32.19ほらもう8人挙手した。
0511デフォルトの名無しさん
2011/06/26(日) 04:23:00.73単一のコードならまだしも不適切な関連だらけだと修正が波及的に増大する。
ツールの補助がないと無理。
0512uy ◆KOAgYBL/Xg
2011/06/26(日) 04:26:40.42object.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] ) , }) ,
}) ,
}) ,
}) ,
}) ,
}) ,
})
0513デフォルトの名無しさん
2011/06/26(日) 04:28:44.500514デフォルトの名無しさん
2011/06/26(日) 04:32:37.60変数を減らすためにあらゆるものを再帰とサーチで済ましていて
そのせいで処理速度がちょっとRubyではきつくなってきてる
0515デフォルトの名無しさん
2011/06/26(日) 04:34:50.47メモリ安全?
型安全?
モジュラリティ?
仕様に準拠しているかどうか?
0516デフォルトの名無しさん
2011/06/26(日) 04:35:50.290517デフォルトの名無しさん
2011/06/26(日) 04:38:23.76やっぱり動的言語では安全なソフトは作れない
http://hibari.2ch.net/test/read.cgi/tech/1306002146/1
1 名前:デフォルトの名無しさん[sage] 投稿日:2011/05/22(日) 03:22:26.61
型をしっかり明記してこそ
安全で堅牢、バグのないソフトは作れる
0518デフォルトの名無しさん
2011/06/26(日) 04:42:16.75以上の感想が持てん。
集合操作のメソッドチェインとUIか何かの宣言的記述など珍しくもない。
誰か見所を教えてくれ。
0519デフォルトの名無しさん
2011/06/26(日) 04:43:38.30uyさんぱねぇっす
まじ読めねぇっす
たしかに異次元な感じっす
0520uy ◆KOAgYBL/Xg
2011/06/26(日) 04:45:10.88半分は、正解。
けど変数のサーチによって速度は遅くなるのは毎回サーチする意味ないから、やろうと思えば回避可能
ソースコードの見た目的な問題で、毎回サーチするようにかいてるけど、たかが知れてる誤差
つうか闇ブログ見つけたのか
もう放置してるけど
0521デフォルトの名無しさん
2011/06/26(日) 04:47:14.94お前が馬鹿だという証明になってしまったなw
0522デフォルトの名無しさん
2011/06/26(日) 04:47:38.13なんでシンボルにしてんの?
シンボルと同じ名前の変数に束縛しても同じじゃん。
しかも変数のほうが速いだろ。
削除したいからか?
0523デフォルトの名無しさん
2011/06/26(日) 04:47:57.67バグのなさが安全だっていうならCoqあたりで証明するしかないんじゃないか?
0524デフォルトの名無しさん
2011/06/26(日) 05:10:50.72Rubyを使わない俺にその点を分かりやすく解説してくれると嬉しい。
0525デフォルトの名無しさん
2011/06/26(日) 05:25:23.52あ、うん。俺もわからない。
0526uy ◆KOAgYBL/Xg
2011/06/26(日) 05:29:07.11同じ種類のクラスオブジェクトだけど、別変数、
↓ window_template2やったobject
object.task.each do | key , object |
object ← search_upやってるobject
end
>>522
殆どのアルゴリズムは漏れは変数名を意識しなくてもかいていけるので、変数宣言をする意味がない
>>524
やめろ
0527デフォルトの名無しさん
2011/06/26(日) 05:31:04.87Rubyスレでもあんまり相手にされてないから放置しといて
0528uy ◆KOAgYBL/Xg
2011/06/26(日) 05:31:27.26こんなに興味もたれるってなんなの?wwww
普段バカにしてるくせに
やっぱりuyの実力を心のどこかでは認めていましたtってこと????
0529uy ◆KOAgYBL/Xg
2011/06/26(日) 05:42:06.13ハァアA???
Rubyスレで誰よりも良質で速い回答しているのはどこのどなた様ですかァ????????
夢に飽きたらRubyスレにおいで^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0530デフォルトの名無しさん
2011/06/26(日) 05:53:00.75ん? 俺のことだが?
0531デフォルトの名無しさん
2011/06/26(日) 05:58:37.58>同じ種類のクラスオブジェクトだけど、別変数、
>↓ window_template2やったobject
>object.task.each do | key , object |
> object ← search_upやってるobject
>end
意味が解からん。インスタンス的に別だと言いたいのか?
それともインスタンスを束縛している変数だけ違うといいたいのか?
あと、今の情報だけじゃobject.search_upを実行してる時、objectのselfをyeildに引渡してるように
渡してるようにしか見えん。
0532デフォルトの名無しさん
2011/06/26(日) 06:04:54.870533uy ◆KOAgYBL/Xg
2011/06/26(日) 06:39:29.29そう、別インスタンス。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
0534uy ◆KOAgYBL/Xg
2011/06/26(日) 06:42:29.180535デフォルトの名無しさん
2011/06/26(日) 06:54:56.95初心者ってのは回りくどいことをして
ドヤ顔するよね。無駄なことやってるだけなのに。
0536デフォルトの名無しさん
2011/06/26(日) 06:59:34.96終わりだろうな。
0537デフォルトの名無しさん
2011/06/26(日) 07:39:15.22のであって、成果物も示さずにえぐいだけではただのオナニー。
まぁ書かれている範囲では単に壮大な車輪の再発明をしているだけの
ようにしか思えんが。
0538デフォルトの名無しさん
2011/06/26(日) 07:58:55.42人間は大抵自分自身何をやっているのか理解出来ていないか、説明に値しない
事しか出来ていないというのが典型的なパターンだな。
プログラミングに限らないよ。写真とかスポーツとか、道具が必要な事柄では
大抵このパターンが観測される。
0539デフォルトの名無しさん
2011/06/26(日) 08:31:52.540540uy ◆KOAgYBL/Xg
2011/06/26(日) 08:48:04.31http://www.geocities.jp/c_zelos/soto/mikomiu2011_06_26_00_07_32.zip
これはuy様だから、書けてるだけ 一般人にこれを書けとは言わない
質問は受け付けねーよ
今回のは、もう根幹部分は完璧になってるから、
もう書き換えることは、ない
ソースコードがすべて
真理について少しだけ語ると、このソースは完璧を目指したソースコードで
オブジェクト指向とかは、非完璧ながらも、それを制御することを目指したソースコードになるんだよ
俺は、非完璧でかいていくほうが最終的には良い、って所までわかった上でこれをやってる
別に誰かがこっち側に来るのも良いけど、多分俺の今かいてるこれが限界点だから、これ以上の進化は無いし
それと対照的に、非完璧 ながらもそれを制御することを目指していくと、限界点が無く、無限に進化し続ける事が可能なんよ
けどまだ見ぬ概念、 擬似完璧というものがあると思う。 その擬似完璧を発見する為には、
非完璧方面が成長するだけじゃ足りず、完璧側も成長させた上で、その集大成を組み合わせることで完成する
俺が死ぬ前に擬似完璧の概念が、自分で発見出来るかも怪しいし、間違っても世界にそれが広まる様子を見れる事はないな・・
完璧なソースコードが広まるのは20年後、 さらなる上、擬似完璧が出来上がるのは100年後といったところ
せっかくのソースもこんな場所に公開しちゃったし
もうゼロの使い魔4期に期待しつつ消えるとする・・・・・・・・
0541デフォルトの名無しさん
2011/06/26(日) 09:09:39.940542uy ◆KOAgYBL/Xg
2011/06/26(日) 09:23:25.250543デフォルトの名無しさん
2011/06/26(日) 09:25:02.09オブジェクト指向とかは、非完璧ながらも、それを制御することを目指したソースコードになるんだよ
俺は、非完璧でかいていくほうが最終的には良い、って所までわかった上でこれをやってる
別に誰かがこっち側に来るのも良いけど、多分俺の今かいてるこれが限界点だから、これ以上の進化は無いし
それと対照的に、非完璧 ながらもそれを制御することを目指していくと、限界点が無く、無限に進化し続ける事が可能なんよ
けどまだ見ぬ概念、 擬似完璧というものがあると思う。 その擬似完璧を発見する為には、
非完璧方面が成長するだけじゃ足りず、完璧側も成長させた上で、その集大成を組み合わせることで完成する
俺が死ぬ前に擬似完璧の概念が、自分で発見出来るかも怪しいし、間違っても世界にそれが広まる様子を見れる事はないな・・
完璧なソースコードが広まるのは20年後、 さらなる上、擬似完璧が出来上がるのは100年後といったところ".scan(/完璧/).size
0544デフォルトの名無しさん
2011/06/26(日) 09:54:57.24手段があっても目的がないからね。
手段を目的化するか目的をでっち上げるしかない。
0545デフォルトの名無しさん
2011/06/26(日) 10:48:29.00結局、テストは静的/動的言語の両方でするってことでいいの?
個人的な経験としては、テスト書けば「わざわざ型検査に関するテストを書かなくても」
型エラーは見つかると思ってるんだが、静的言語派はそうは考えないってことだよね?
なんでそう思うんだろう?
0547デフォルトの名無しさん
2011/06/26(日) 11:02:36.37それだけで満足じゃないなら、コンパイルして通ればもう安全、
じゃないってことだよね?
安全なプログラム書くためにはテスト必要だよね?
テスト書くんだよね?書いてるんだよね?
で、型エラーはテスト実行時に見つかるよね?
何が問題なの?
0548uy ◆KOAgYBL/Xg
2011/06/26(日) 11:03:54.73っっっっっはあwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww?
0549デフォルトの名無しさん
2011/06/26(日) 11:14:20.56>>482の流れだと
静的言語:型チェックのテストを書く。静的に型チェックされる。
動的言語:型チェックのテストを書かない。静的に型チェックされない。
ということになるかな?
動的言語は安全そうには見えないが……
0550デフォルトの名無しさん
2011/06/26(日) 11:18:13.92型付け自体が弱くなければ、テスト実行時に型チェックされる
0551デフォルトの名無しさん
2011/06/26(日) 11:26:42.75「コンパイル時にチェックされないこと = 本番までチェックされないこと」
になるんだよね?そうだよね?
0552デフォルトの名無しさん
2011/06/26(日) 11:33:34.13動的厨はテスト完全にやれば大丈夫と言うんだろうけど、
でかいシステムでは、至難の業。
そう言う現実を見てない/知らないから、動的厨でいられ
るんだろうけど。
0553デフォルトの名無しさん
2011/06/26(日) 11:35:01.730554デフォルトの名無しさん
2011/06/26(日) 11:37:51.52強い動的型付け言語の場合、実行時に自動的に型の整合性はチェックされる
だからテストを書いてれば、わざわざ型チェック用コードを入れなくても
型エラーは調べられる
ま、それもこれもカバレッジが十分高い場合だけなのは事実だが、
静的言語であっても十分にテストされてないコードは
安全とは言いかねる
0555デフォルトの名無しさん
2011/06/26(日) 11:39:49.72あなたの現実 = 土方ですよねーwww
0556デフォルトの名無しさん
2011/06/26(日) 11:47:49.46> 現実って言葉を多用する奴ほど、そいつの脳内設定のことである確率が高い
それこそでかいシステムに携わったことないやつの脳内イメージだと思うが。
>>554
> 静的言語であっても十分にテストされてないコードは安全とは言いかねる
それは事実だが、静的言語であればコンパイル時に型の不整合はチェック
されてるから、少なくともそこに起因するバグだけは少なくなる。
>>555
土方かどうかかかわらず、現実だからな。
脳内で作った気になるならいいんだろうけど。(w
0557デフォルトの名無しさん
2011/06/26(日) 11:50:20.88・C/C++ PG : 魚を捕ってくる人
・動的言語 PG : 魚を捌いて刺身にする人
・Java 土方 : 刺身にタンポポ乗せる人
仕事が違えば必要とされる道具(言語)も違う
0558デフォルトの名無しさん
2011/06/26(日) 11:54:00.52あれはタンポポじゃなくて、食用菊だぞ。
0559デフォルトの名無しさん
2011/06/26(日) 11:59:45.83つまり動的言語でもテスト書けば安全ってことと、
静的言語でもテスト書かないと安全じゃないってことは認めるのか?
0560デフォルトの名無しさん
2011/06/26(日) 12:00:57.88>・動的言語 PG : 魚を捌いて刺身にする人
なんか適当に切り刻んだ刺身が出てくる店の話?
0561デフォルトの名無しさん
2011/06/26(日) 12:03:07.570562デフォルトの名無しさん
2011/06/26(日) 12:03:40.93>それは事実だが、静的言語であればコンパイル時に型の不整合はチェック
>されてるから、少なくともそこに起因するバグだけは少なくなる。
逆に言えば動的言語はコードの汎用性を高めるために
静的言語では機械がチェックしていることをわざわざ人間にやらせているということになるのかな。
プログラマの負担が増えるのでは本末転倒のような気もする。
0563デフォルトの名無しさん
2011/06/26(日) 12:05:29.69お前は型付けの強い弱いと静的動的を混同してる
0564デフォルトの名無しさん
2011/06/26(日) 12:08:31.66テストが実行されれば型は実行時に機械的にチェックされる
どうせテストは書くんだから、プログラマの負担は増えてないよ?
0565デフォルトの名無しさん
2011/06/26(日) 12:08:33.70無駄な煽りが消えるんじゃね?
0566デフォルトの名無しさん
2011/06/26(日) 12:10:20.00静的言語最強
0567デフォルトの名無しさん
2011/06/26(日) 12:13:21.510568デフォルトの名無しさん
2011/06/26(日) 12:14:46.46> つまり動的言語でもテスト書けば安全ってことと、
> 静的言語でもテスト書かないと安全じゃないってことは認めるのか?
そりゃそうだろ。
ただ、問題は完全なテストを書けるかだ。
>>562
> 静的言語では機械がチェックしていることをわざわざ人間にやらせて
> いるということになるのかな。
単に静的はコンパイル時に、動的は実行時にチェックしてるだけのこと。
ただ、コンパイル時にチェックするためにそれ相応の情報が必要なので、
ちょっとコードを書くのが面倒だったする。
0569デフォルトの名無しさん
2011/06/26(日) 12:17:10.35脳味噌の知識がないやつは気楽でいいねぇ (w
0570デフォルトの名無しさん
2011/06/26(日) 12:18:26.28値のテストは型のテストを兼ねる
型のテストが必要になるのは、型さえ合えばどんな値でも構わない場合に限られる
0571デフォルトの名無しさん
2011/06/26(日) 12:21:22.54コンパイル時にチェック出来ないものは全部仕様ですwww
0572デフォルトの名無しさん
2011/06/26(日) 12:34:37.94そう言われてみればそのとおり。
0573デフォルトの名無しさん
2011/06/26(日) 14:07:46.53動的でいいじゃん。俺があらゆるテスト書くから。
こんな奴信用するか。
0574デフォルトの名無しさん
2011/06/26(日) 14:09:17.860575デフォルトの名無しさん
2011/06/26(日) 14:11:39.230576デフォルトの名無しさん
2011/06/26(日) 14:28:37.920577デフォルトの名無しさん
2011/06/26(日) 15:08:54.77俺はテスト書かないから、テスト書くって言ってる奴は信じられん
そういうことですね?
0578デフォルトの名無しさん
2011/06/26(日) 15:25:46.06テストしなくても安全なんですよ。
こんな奴信用するか。
0579デフォルトの名無しさん
2011/06/26(日) 15:28:24.17>静的言語はコンパイラが型検査してくれるから
>テストしなくても安全なんですよ。
>こんな奴信用するか。
誰も言ってもいないような話を持ち出す奴も信用ならんだろう。
0580デフォルトの名無しさん
2011/06/26(日) 15:30:17.980581デフォルトの名無しさん
2011/06/26(日) 15:34:27.01まさにこんな奴らが釣れててワロタ
0582デフォルトの名無しさん
2011/06/26(日) 15:36:38.52心の叫びが聞こえるスレ
0583デフォルトの名無しさん
2011/06/26(日) 15:38:33.74動的言語でも安全なソフトが組めるってことで
話が終わっちゃうじゃん
0584デフォルトの名無しさん
2011/06/26(日) 15:38:43.04テストはしないってことなんだって
勘違いするのか理解できん。
どうしてそう思ったのか、
そこを説明してくれないか?
0585デフォルトの名無しさん
2011/06/26(日) 15:39:56.38>>583
0586デフォルトの名無しさん
2011/06/26(日) 15:41:04.41今言ってるのは、型チェックのテストのことだよ。
静的言語では、コード書いているうちに自動的に行える型チェックのテストを
動的言語では手動で書くということでいいのか?
上の方で、型チェックのテストは書かないと
言っていたはずだが。
動的言語は、テストを書かないってことでいいね?
0587デフォルトの名無しさん
2011/06/26(日) 15:42:10.09>>563
0588デフォルトの名無しさん
2011/06/26(日) 15:43:49.15> テスト書くってことにしたら
> 動的型言語では型チェックを一々テストでも書かないよ。
> 動的型言語では型チェックを一々テストでも書かないよ。
> 動的型言語では型チェックを一々テストでも書かないよ。
読みましたか?
テストは書かないのです。
0589デフォルトの名無しさん
2011/06/26(日) 15:44:34.56頭おかしいんじゃないの?www
>>554でも読んどけ
0590デフォルトの名無しさん
2011/06/26(日) 15:48:46.040591デフォルトの名無しさん
2011/06/26(日) 15:50:13.400592デフォルトの名無しさん
2011/06/26(日) 15:51:05.66>>437
0593デフォルトの名無しさん
2011/06/26(日) 15:56:46.68引数の順番や数が違うとかそういうのは
ケアレスミス なんだよ?
コンパイラが教えてくれるもの。
それを、自分でテストかコード書いて
自分で調べるって、無駄だろ。
ケアレスのためにどれだけ苦労してるんだよ。
0594デフォルトの名無しさん
2011/06/26(日) 15:57:26.52動的型言語では型チェックを一々テストでも書かないよ。
0595デフォルトの名無しさん
2011/06/26(日) 16:02:01.65>>437の
> プログラムの性質を確認するために普通なら必要だった単体テストの数を減らしてくれる
ってのは嘘だと思う
だって実行したら機械的に型チェックも行われるんだよ?
>>570のいうように値をテストしたら型チェックも兼ねるんだよ?
また関数の引数の数も機械的にチェックされるよ?
つまり、最低限のまともなテストを実行したら型チェックは行われるんだよ
まあ、最低限のテストさえしないなら型チェックは行われないが、
そんなプログラムは安全ではない
0596デフォルトの名無しさん
2011/06/26(日) 16:03:27.23実行しなかったら?
たとえ実行したとしても
エラーになるデータを使わなかったら?
0597デフォルトの名無しさん
2011/06/26(日) 16:04:20.060598デフォルトの名無しさん
2011/06/26(日) 16:06:44.24そんなもんアウトに決まってる
でも、その場合は静的言語でも型検査通ってるだけで
値のチェックも何も通ってないんだから
安全とはいいかねる
0599デフォルトの名無しさん
2011/06/26(日) 16:10:53.35日本の土方が書くJavaプログラムよりは
Amazonのプログラマが書くPerlの方が安全だろうし、
結局は書き手の能力に依存しすぎる
俺は日本の土方に書かせるなら絶対に静的言語一択だけど
0600デフォルトの名無しさん
2011/06/26(日) 16:11:41.54安全ってのは0から100%まである。
で、漏れや時間がなくて手抜きしたとき、そのパーセンテージは下がる。
テストを完璧にやれば100%だが、
テストの組み合わせの数を考えると、IFが10個あるだけで
テストパターンは1024個にもなる。
そこから考えると、実行時に手動でテストコードを書くよりも
実行前にコンパイラを使うことで自動的にテストするほうが良い。
自動テストなら組み合わせがいくつあっても、テストは1つですむ。
そうやって節約できた時間で、テストコードを書く。
そうして安全度を高めるのだ。
0601デフォルトの名無しさん
2011/06/26(日) 16:16:42.33安全かどうかが程度問題というなら、
動的言語で十分にテスト書かれてるなら型検査も十分にテストされてる
静的言語はテスト書かなくても100%型検査はテストされてるが
十分にテスト書かないと結局は安全とは言い難い
0602デフォルトの名無しさん
2011/06/26(日) 16:17:19.86「理論的には」で語ってるよね。
現実を知らないのでは?
0603デフォルトの名無しさん
2011/06/26(日) 16:17:33.57それはない。
0604デフォルトの名無しさん
2011/06/26(日) 16:19:27.89現実の話をしたら、テスト後に型エラーなんて見ないからさ
なに型検査にばかり拘ってるのか不思議
0605デフォルトの名無しさん
2011/06/26(日) 16:19:33.80小規模のプロジェクトでしか使われないんだろ
0606デフォルトの名無しさん
2011/06/26(日) 16:19:45.39じゃあテスト書いてみてよ
0607デフォルトの名無しさん
2011/06/26(日) 16:21:26.44それはテストが完璧な場合の話。
世の中に完璧なテストが行われている
プロジェクトがあるのか?
テストが完璧ならバグもないはずだが。
結局、人間ががんばらないといけないものは完璧にはならない。
だから機械(コンパイラ)にさせるんじゃないか。
0608デフォルトの名無しさん
2011/06/26(日) 16:22:02.050609デフォルトの名無しさん
2011/06/26(日) 16:22:34.50同意
0610デフォルトの名無しさん
2011/06/26(日) 16:23:23.50assertEquals(1, 2);
0611デフォルトの名無しさん
2011/06/26(日) 16:36:12.77完璧じゃないなら安全じゃないなら
この世に安全なプログラムは存在しないな
テスト項目は型検査だけじゃないからな
0612デフォルトの名無しさん
2011/06/26(日) 16:38:33.90静的言語withテスト >= 動的言語withテスト >>>>>>>> 静的言語 >>>> 動的言語 >> ∞ >> Java土方のプログラム
理論的には静的言語の方が安全
0613デフォルトの名無しさん
2011/06/26(日) 16:40:48.230614デフォルトの名無しさん
2011/06/26(日) 16:44:20.99ほらねw やっぱり動的厨は
安全を0か1で語ってる。
さっき書いたとおりでしょ?
0615デフォルトの名無しさん
2011/06/26(日) 16:46:45.46型検査を0か1かで語ってるのはお前
0616デフォルトの名無しさん
2011/06/26(日) 16:50:50.920617デフォルトの名無しさん
2011/06/26(日) 17:12:17.27>>613はどう見ても静的言語の事だろ
0618デフォルトの名無しさん
2011/06/26(日) 17:26:03.29>assertEquals(1, 2);
それのどこが、
>>601
> まあ動的言語のほうがテストも書き易いんだけどね
を示すことになるんだ?
0619デフォルトの名無しさん
2011/06/26(日) 17:34:14.73何言ってんだ?それは
動的言語の方がテスト書き易い(>>601)
=> それはない(>>603)
=> じゃあ書いてみろ(>>606)
って言われて、静的厨が頑張って書いたテストコード(笑)じゃん
0620デフォルトの名無しさん
2011/06/26(日) 17:38:01.02おお、そうか、素で間違ってたよ。
なら、動的ならこれより書き易いんだな。
動的のテストコードフリーズ。
0621デフォルトの名無しさん
2011/06/26(日) 17:39:12.41静的厨を笑うところ
普段からテスト書いてねーのかよ
0622デフォルトの名無しさん
2011/06/26(日) 17:43:16.03頑張れよwww
0623デフォルトの名無しさん
2011/06/26(日) 17:43:50.79なんでテストコード書いてみろと言われて
書かずにそんなレスをするのか?
0624デフォルトの名無しさん
2011/06/26(日) 17:43:59.560625デフォルトの名無しさん
2011/06/26(日) 17:45:48.49だってもう動的言語のテストの例は出てるじゃん
0626デフォルトの名無しさん
2011/06/26(日) 17:47:59.460627デフォルトの名無しさん
2011/06/26(日) 17:49:49.41それを動的言語で書いたら
どうなるかなーってのが今の話の流れ
0628デフォルトの名無しさん
2011/06/26(日) 17:50:13.96unittestで検索したら>>132があったよ
0629デフォルトの名無しさん
2011/06/26(日) 17:52:38.70これをJavaでかいたらどうなるのか?
import unittest
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')
0630デフォルトの名無しさん
2011/06/26(日) 18:00:32.73セミコロンとかダブルクォーテーションとか
どうでもいいところは手抜きして書いた。
@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')
}
0631デフォルトの名無しさん
2011/06/26(日) 18:01:08.27静的言語では書かなくて良いたぐいのテストコードになるんじゃない?
foo関数でちゃんと値が追加されてるかテストしろとかならわかるけど…
0632デフォルトの名無しさん
2011/06/26(日) 18:12:33.42つまりfoo()がhashを返すような関数の場合に変更して、
self.assertEqual(foo('a', 'b', '111')[0], '111')
的なコードを書けってことかい?
なんか本質的なつっこみじゃないなぁ
0633デフォルトの名無しさん
2011/06/26(日) 18:25:21.80>つーか、そこはまともなテストコードを提供できない
>静的厨を笑うところ
>普段からテスト書いてねーのかよ
いや、どう考えても
> まあ動的言語のほうがテストも書き易いんだけどね
なんてこと言ってる奴のターンだろ。
0634デフォルトの名無しさん
2011/06/26(日) 18:31:03.17from minimock import mock, restore
mock(module.bar)
...
restore()
しとけば、...では内部でbar()を呼んでるコードはモックに置き換えられるとか
0635634
2011/06/26(日) 18:34:52.19あと静的言語でも同じことできるのかも
0636デフォルトの名無しさん
2011/06/26(日) 18:42:47.95class FooTest extends FunSuite {
test("foo関数の型チェックテスト") {
foo("a","b","111")
intercept[ValidationError]{ foo("a","b",111) }
intercept[ValidationError]{ foo(0,"b","111") }
intercept[ValidationError]{ foo("a",0,"111") }
}
}
0637デフォルトの名無しさん
2011/06/26(日) 18:50:28.27平行線にしても凄すぎるわ。
もうちょい濃い議論してんのかと思ったのに。
スレ開いて損した。
0638デフォルトの名無しさん
2011/06/26(日) 19:54:32.43静的言語だからってなんでテストコードを静的言語で書かないといけないの?
0639デフォルトの名無しさん
2011/06/26(日) 20:18:29.94そもそもスレタイからどんどん脱線するからなこのスレ
その上コテが住み着いてちゃ纏まるはずがない
0640デフォルトの名無しさん
2011/06/26(日) 20:53:26.090641デフォルトの名無しさん
2011/06/26(日) 23:50:15.49プログラムが正常に動作するなんて保障どこにもないし
別モジュールが未完成のハードウェアだったり
要求仕様自体が間違ってたりしたらどーするんだよ?
ユニットテストの目的は別な所にある
0642デフォルトの名無しさん
2011/06/26(日) 23:57:38.15それをいうとプログラム停止問題と同じで100%保証は無理。
>別モジュールが未完成のハードウェアだったり
仕様が決まってるならスタブ使えばいいかと。
0643デフォルトの名無しさん
2011/06/27(月) 00:36:02.710644デフォルトの名無しさん
2011/06/27(月) 00:47:27.52テストで安全は担保出来ないという話なら、同意。
あくまで誤りを検出して、修正するのが目的だから。
0645デフォルトの名無しさん
2011/06/27(月) 00:59:32.15型の制約は実質的に必要な制約より強すぎるんだよな
そこで一種のトレードオフになってしまう
0646デフォルトの名無しさん
2011/06/27(月) 01:04:10.84どんな時に、その制約以上のことをしたくなるんだ?
0647デフォルトの名無しさん
2011/06/27(月) 02:04:16.19今から○○の型を使います。
この引数は○○の型です。
宣言した後、○○の型といいましたけど、
違う型として使います。なんていうのは
そもそも設計が間違ってる証拠なんだよ。
0648デフォルトの名無しさん
2011/06/27(月) 02:40:31.65例えばJavaで既存のライブラリ使っててイライラするのはこういう辺り。
Javaでプログラム組む時の設計思想としてクラスの責務をなるべく狭くするよね。
結果として細かいクラスが沢山できる。特にバリュークラスなんかが。
Stringそのままを使うのではなく、Stringをフィールドに持つnichan.res.Nameクラスが作られたりする。
で、Stringのサブクラスではないので、Stringのメソッドは使えないし、Stringを仮引数に持つメソッドにも渡せない、getName()で参照する事しかできない。
クラス設計者が想定した範囲外のことをやろうとすると、とても面倒になる。
0649デフォルトの名無しさん
2011/06/27(月) 03:02:16.65> getName()で参照する事しかできない
参照する以外に何をやりたいの?
getNameしか用意されていないのであればクラスの設計者が参照以外の
操作は安全ではないと言っているのだろう。
>Stringのメソッドは使えないし
getNameで取ってきた値には使えるだろう。
>Stringを仮引数に持つメソッドにも渡せない
getNameで取ってきた値は渡せるだろう。
何が困るの?
0650デフォルトの名無しさん
2011/06/27(月) 03:28:27.96静的型の制約は弱すぎるからランタイムエラーがなくならない
あれだけ無駄に長々と書いてもまだ弱いから、
静的型に使う労力をテストに使った方がいいんじゃないかという話が出てくる
0651デフォルトの名無しさん
2011/06/27(月) 03:32:37.20言ったもん勝ちだなw
0652デフォルトの名無しさん
2011/06/27(月) 03:46:13.95なくすのが目的じゃなくて、減らすのが目的なんだよ。
ランタイムエラーは静的エラーと違って見つけるのが難しい。
だからなるべく減らすべきものなんだ。
静的エラーで分かるようなことを
ランタイムエラーにするのは
余計に労力がかかることになる。
0653デフォルトの名無しさん
2011/06/27(月) 04:18:30.28http://www.cis.upenn.edu/~bcpierce/papers/harmful-mfps.pdf
既存の型システムの問題点について端的に
Benjamin C. Pierceつったら型の専門家のはずなので
まあ名無しよりは信用できるだろう
近い将来にはもっとまともな型システムが設計されて
動的の柔軟性と静的の検証・コード生成の効率化を
バランスさせることができるようになる……といいね
0654デフォルトの名無しさん
2011/06/27(月) 04:20:22.32別に対して柔軟じゃないな。
0655デフォルトの名無しさん
2011/06/27(月) 07:46:37.650656デフォルトの名無しさん
2011/06/27(月) 07:59:23.440657デフォルトの名無しさん
2011/06/27(月) 08:31:26.86拡張メソッドとかバカ仕様すぎる
0658デフォルトの名無しさん
2011/06/27(月) 09:11:14.78柔軟さに大差ないってのは、そいつが碌に動的言語を
知らないってことだからアホすぎる
「動的言語?型を省略出来るんでしょ?」程度の理解のJava土方らしいね
0659デフォルトの名無しさん
2011/06/27(月) 10:05:33.07具体的なレスしたら負けなの?
0660デフォルトの名無しさん
2011/06/27(月) 15:46:51.20具体的なレスをどうぞどうぞ
0661デフォルトの名無しさん
2011/06/27(月) 16:31:43.940662デフォルトの名無しさん
2011/06/27(月) 20:57:04.10叫ぶスレだよ。
はいみんないっせいに
ばーかばーか、俺天才
0663デフォルトの名無しさん
2011/06/28(火) 01:27:49.900664uy
2011/06/28(火) 05:41:16.34本当につい最近だから
静的言語側よりも、プログラマーの総数も、ソースコードの総量も
全然まだ無いんだよ 実績も、ライブラリもな
時代遅れの静的厨なんてほうっておいて、つくっていけば良い
実際、型エラー(笑) 程度、
思ったんだけど実際に作っていく段階で殆ど取れてるわ
無駄に、型としてクラス作りまくらなければなwwwwwwwwwwwwwwwwww
このスレにいる静的厨の中に
「静的言語も動的言語も開発効率はかわらない(キリッ」
ってのを、マジで言ってそうやつもいるし、マジでレベルが低いんだと思う
0665デフォルトの名無しさん
2011/06/28(火) 06:14:13.89ここはトイプログラムスレじゃないから
0666デフォルトの名無しさん
2011/06/28(火) 06:33:43.58それに触っちゃ、めーっよ
0667デフォルトの名無しさん
2011/06/28(火) 06:35:13.010668デフォルトの名無しさん
2011/06/28(火) 06:40:41.59それはあれか?このスレ全体を皮肉ってるのか?w
0669uy
2011/06/28(火) 15:26:50.64667 :デフォルトの名無しさん:2011/06/28(火) 06:35:13.01
実績ないやつがいくら叫んでも認められないってことにいいかげん気づけよ
↑
だから実績を作れよって言ってんだろ おれは。w
0670uy
2011/06/28(火) 15:28:00.11はぁ
そりゃ、君は動的言語が扱えないから?
トイプログラムしかつくれませーんって? いっちゃってるわけ?
自分からバカです って自己申告してくる奴って多いよな・・・・・・・・・・・・・・・・・・・・・・・・・・
0671デフォルトの名無しさん
2011/06/28(火) 15:48:41.740672デフォルトの名無しさん
2011/06/28(火) 15:56:03.470673デフォルトの名無しさん
2011/06/28(火) 15:57:49.370674デフォルトの名無しさん
2011/06/28(火) 21:28:52.33実績がないやつが満足するスレ。
0675デフォルトの名無しさん
2011/06/28(火) 21:39:29.110676デフォルトの名無しさん
2011/06/28(火) 21:50:23.50うまい言葉だよね。
結局自分が、○○と言われたら図星で嫌だと
思うから、そのことを他人に言うわけだよ。
本当は自分が○○なんだって自覚してるんだろうね。
あ、うん。土方の話ね。
0677デフォルトの名無しさん
2011/06/28(火) 22:26:53.85学歴や資格よりも実務経験優先だからな
屁理屈野郎がドカタ以下のゴミって事はよくある
0678デフォルトの名無しさん
2011/06/28(火) 23:32:59.27基本的にどこも経験者募集だ
0679デフォルトの名無しさん
2011/06/28(火) 23:38:38.39だって、フレームワークやらライブラリやらがすごく成熟してるから
土方作業のように何も考えずに作れちゃうんでしょ?
動的言語でもRoRとかはいい感じに土方させてくれるのかな?
0680デフォルトの名無しさん
2011/06/28(火) 23:57:58.89言語の話してるのに。
0681デフォルトの名無しさん
2011/06/29(水) 00:00:23.00リアルで
0682デフォルトの名無しさん
2011/06/29(水) 00:26:36.81想像してワロタw
0683デフォルトの名無しさん
2011/06/29(水) 00:30:58.26あるある
0684デフォルトの名無しさん
2011/06/29(水) 01:10:35.95開発するってことならJava一択だと一貫して主張してるが、
これはJavaを褒めてるんだよ
素直に喜べば良いのに
0685デフォルトの名無しさん
2011/06/29(水) 01:15:21.670686デフォルトの名無しさん
2011/06/29(水) 01:21:57.150687デフォルトの名無しさん
2011/06/29(水) 01:33:11.910688デフォルトの名無しさん
2011/06/29(水) 02:01:35.600689デフォルトの名無しさん
2011/06/29(水) 02:26:32.18土方とは格が違うのだよ。
0690デフォルトの名無しさん
2011/06/29(水) 02:32:12.420691デフォルトの名無しさん
2011/06/29(水) 02:41:18.36そもそもドカが職になんかならないしw
0692uy ◆hi.ht/Isu2
2011/06/29(水) 03:38:22.030693デフォルトの名無しさん
2011/06/29(水) 03:43:07.710694uy ◆hi.ht/Isu2
2011/06/29(水) 06:13:33.460695デフォルトの名無しさん
2011/06/29(水) 10:24:35.81大規模大規模って、世の中フルスクラッチな大規模開発ばかりじゃないってのよ。
0696デフォルトの名無しさん
2011/06/29(水) 11:05:36.390697uy ◆qq69ldDh7A
2011/06/29(水) 11:09:01.150698デフォルトの名無しさん
2011/06/29(水) 11:18:47.23C++やJavaあがりのプログラマには難しいみたいだ
0699デフォルトの名無しさん
2011/06/29(水) 11:25:34.270700デフォルトの名無しさん
2011/06/29(水) 12:52:21.610701デフォルトの名無しさん
2011/06/29(水) 21:23:12.66ただ、このスレに来るJava使いにロクなのが…
0702デフォルトの名無しさん
2011/06/29(水) 21:25:50.900703デフォルトの名無しさん
2011/06/29(水) 23:12:57.300704デフォルトの名無しさん
2011/06/29(水) 23:17:14.52挫折しては再挑戦を繰り返してる趣味グラマーな自分でも答えられる質問がjavaスレだけ多いのが色々物語ってる気がする。。。
0705デフォルトの名無しさん
2011/06/29(水) 23:22:46.750706デフォルトの名無しさん
2011/06/29(水) 23:24:24.160707デフォルトの名無しさん
2011/07/01(金) 01:28:49.69んなやついるわけねーよ
ここにいる奴らはみんな適材適所で動的静的を使い分けられる
みんなネタで煽りあってるのが分からないのか?
0708デフォルトの名無しさん
2011/07/01(金) 03:37:03.10俺は動的言語のプロ
0709デフォルトの名無しさん
2011/07/01(金) 04:05:47.69買いかぶりすぎだろうw
動的言語のメリットである柔軟性に話が及ぶと
そこから先へは話が進んでいってないからね
0710デフォルトの名無しさん
2011/07/01(金) 06:50:43.160711デフォルトの名無しさん
2011/07/01(金) 21:47:18.91今の若い子はもっと色々できるだろう。
0712デフォルトの名無しさん
2011/07/01(金) 22:23:42.010713デフォルトの名無しさん
2011/07/02(土) 08:55:49.74いや、若いヤツの方がそういうのが多いな
自宅ではMac使ってて、unixバリバリ使えて、LLもそれなりにいける
なんて感じのJavaの技術者なんて30以上のおっさんが多い
0714デフォルトの名無しさん
2011/07/02(土) 10:38:53.99つまり土方は30以上ってことか
0715デフォルトの名無しさん
2011/07/02(土) 14:42:24.910716デフォルトの名無しさん
2011/07/02(土) 15:11:59.570717デフォルトの名無しさん
2011/07/02(土) 15:23:36.12まあ、なんだ、ガンバレ。
0718大天使 ◆uL5esZLBSE
2011/07/02(土) 17:35:58.030719デフォルトの名無しさん
2011/07/02(土) 22:45:27.980720デフォルトの名無しさん
2011/07/02(土) 23:15:33.320721デフォルトの名無しさん
2011/07/02(土) 23:50:54.890722天使 ◆uL5esZLBSE
2011/07/03(日) 14:11:36.420723デフォルトの名無しさん
2011/07/04(月) 02:09:17.38知事との握手を拒否
http://www.youtube.com/watch?v=VtUqWdbjnTk
「客を出迎えるときはおまえが先に部屋に入ってから俺を呼べ」
「今のはオフレコで」
「書いたらその社は終わりだからな!」
0724デフォルトの名無しさん
2011/07/05(火) 21:55:28.75http://www.infoq.com/articles/twitter-java-use
英語だけど、読めるよな?
0725デフォルトの名無しさん
2011/07/05(火) 22:42:15.33そこで書かれてるのって主にパフォーマンス面じゃね?
安全性の話はあまり書かれてないように見えるが
0727デフォルトの名無しさん
2011/07/05(火) 22:50:00.840728デフォルトの名無しさん
2011/07/05(火) 23:04:34.43ちょwww
0729デフォルトの名無しさん
2011/07/05(火) 23:14:25.87ああ、確かに...
最後の方で、静的型付けのおかげで全体に一貫性が生まれて、
生産性が上がったよとちょっとだけ書いてある
0730デフォルトの名無しさん
2011/07/05(火) 23:22:56.93仕様がコロコロ変わる時期には動的型か、静的型でも型推論くらいはないとやってられんかな
0731デフォルトの名無しさん
2011/07/05(火) 23:27:39.26動的型だと仕様が変わったとき、
ちょっと変えるだけで動く・・・ようにみえて
動いていないって状態になる。
動かせば動かすほどエラーが発生する。
静的型だと極端に変なコードだと動かないし、
一箇所変えるだけで、それに連動する場所を自動で変えてくれたりする
(リファクタイングブラウザ)
0732デフォルトの名無しさん
2011/07/05(火) 23:43:21.610733デフォルトの名無しさん
2011/07/05(火) 23:48:14.070734デフォルトの名無しさん
2011/07/05(火) 23:49:44.660735デフォルトの名無しさん
2011/07/05(火) 23:50:38.56それは同意
0736デフォルトの名無しさん
2011/07/05(火) 23:51:17.88だからRubyで作ってJavaで作り直す
0737デフォルトの名無しさん
2011/07/06(水) 00:04:31.66何の妄想なんだろうか?
変更があったとき、変更する箇所は
動的も静的も同じじゃん。
その上で、静的ならIDEで一括変更できるけど
動的はまず無理だからって話でしょ?
0738デフォルトの名無しさん
2011/07/06(水) 00:08:30.88比較できないしな
0739デフォルトの名無しさん
2011/07/06(水) 00:38:40.54明日もIDEでリネーム作業頑張ってね
0740デフォルトの名無しさん
2011/07/06(水) 00:50:51.39静的言語は仕様変更に強い。
便利さに嫉妬して、馬鹿にするほどにw
0741デフォルトの名無しさん
2011/07/06(水) 00:56:45.87静的言語:既存コードをIDEで書き換える(renameは静的型付け圧倒的有利、他は知らん)
動的言語:既存コードを動的に置き換える(duck-typing, monkey-patching)
0742デフォルトの名無しさん
2011/07/06(水) 00:59:20.08methodM と methodN に分けた時に、methodA の呼び出しを使っている機能に応じて
methodM と methodN に書き換えるのは静的型付け言語でも無理。
単純な置換 → 動的言語でも可能
複雑な置換 → 静的言語でも不可能
0743デフォルトの名無しさん
2011/07/06(水) 00:59:49.28素朴に不思議なのが、動的言語使ってる人たちは、どうやってソースレベルでデバッグしてるのだろうか?
たとえば、ある動的関数f()が、実行時にa()やb()として動くとして、
ソースを読んだだけだと、実行時のある瞬間に、実際に実行されるのがa()なのかb()なのかの判断は難しいと思う。
すると当然専用のデバッガーを使うことになるのだけど、デバッガーを介さなければデバッグできないソースってのが、
はたして読みやすくて理解しやすいコードなのか?と本末転倒さを感じる。
動的言語の本来の目的は、ソースコードをより理解しやすく管理しやすいものにするためだと思うのだが、
それが本当に上手くいくのだとは信じられない。
たとえばコード中に、まったく振る舞いの違う同名の関数や変数、たとえばまったく振る舞いの違うprint()が大量に定義されてるとして、
このソースを人間が目視で読んでデバッグすることが、本当に容易だろうか?と。
逆に難解になってしまってるような気がするのだが。
たとえば複数種類のprint()があるとして、これら個々の関数にユニークな名前をつけることが、本当に悪なのだろうか?
という根本的な疑問を感じる。
a_print()やb_print()などユニークな名前を割り当てることが、本当にプログラムの難解さや保守の難しさへとつながるのだろうか?
信じられない。どう考えてもa_print()の方が保守管理しやすいコードになると思う。だってgrep a_print * がまさに動くよ。
0744デフォルトの名無しさん
2011/07/06(水) 01:02:08.690745デフォルトの名無しさん
2011/07/06(水) 01:05:38.91int foo(long bar, double baz, char qux)
を
void hoge(char *fuga, long fuu, double hoo)
に書き換えるのも簡単なんだろうなあ...
それとも引数の名前を変えたいなんて事は無い?
0746デフォルトの名無しさん
2011/07/06(水) 01:09:16.76そりゃー動的言語どころか、ポリモーフィズム自体を否定する感じだねぇ
ま、言いたいことは分かる
動的言語は実行速度が遅い分、Cと簡単に組み合わせて使えるように出来てる
だから、例えばCでプリミティブなモジュールを実装し、
関数ポインタ駆使して実装するようなコードを動的言語で書くと
いい感じになるよ
0747デフォルトの名無しさん
2011/07/06(水) 01:18:51.72リネーム(笑)って馬鹿にされてる中、それでもリネームの例を出す
そういうの嫌いじゃないぜ
0748デフォルトの名無しさん
2011/07/06(水) 01:21:48.48意味が良く解らんが、
メソッドの分割というか、メソッドの一部分を抜き出すことは
静的言語というかIDEの機能だがEclipseでできるよ。
静的言語がそういうコンパイル時の情報を持っているからこそなんだけど
関数の一部分を選択してメソッドの抽出を行うだけで
その部分を関数にして、引数と戻り値を適切に設定してくれる。
またその逆でメソッドの中身を、そのメソッドの呼出部分にインライン化もできる。
だから関数分割は以下のようにして行える。
1.methodAの中身を抽出して、二つの関数methodMとmethodNの呼び出しに変更する。
2.methoaAのインライン化を行う。一回の操作ですべてのmethodAの呼び出しをインライン化できる
0750デフォルトの名無しさん
2011/07/06(水) 01:26:24.93methodA を methodN と methodM に分割したとして、
methodA を呼び出していた側が methodN の機能を使いたいのか、
methodM の機能を使いたいのかを IDE で判別できるの?
って話。
0751デフォルトの名無しさん
2011/07/06(水) 01:32:23.60動的厨のほとんどは
そのような高度なことは出来ない
0752デフォルトの名無しさん
2011/07/06(水) 01:32:44.21少なくともmethodAをmethodNとmethodMに分割することはできる。
そして、methodAを呼び出している部分を適切に検索することもできる。
名前検索ではなくコードを理解しているから、使用している箇所を正しく判断できる。
ここまででも十分楽できたでしょ?
面倒なのはこういう機械的な分割なんだから。
それに今までmethodAを呼びだしていたのに、その一部のmethodNだけでよいとか
methodMだけでよいとかそういう修正が入ることはまず無いと思うんだが?
こんなことをしたら動きが変わってしまうのでこれはリファクタリングにはならないはず。
動作の修正はもちろん人間がやるべきところだよ。
0753デフォルトの名無しさん
2011/07/06(水) 01:34:48.32>そして、methodAを呼び出している部分を適切に検索することもできる。
>名前検索ではなくコードを理解しているから、使用している箇所を正しく判断できる。
それは grep や sed で充分だわ
結局リネームしか出来ないのね...
0754デフォルトの名無しさん
2011/07/06(水) 01:35:13.43メソッド名が、getだったら?
0755デフォルトの名無しさん
2011/07/06(水) 01:37:32.00関数の統合分割できてるじゃん。
目が見えないの?
それとも、わ・ざ・と?w
0756デフォルトの名無しさん
2011/07/06(水) 01:38:53.10ただメソッド抽出/分解するだけなら動的言語でも可能
なんで変数の型付けが関係あると思ったの?
0757デフォルトの名無しさん
2011/07/06(水) 01:39:11.72それは get(foo) を getFoo() に変えたいとか、そういう話?
何が問題かもっと具体的に
0758デフォルトの名無しさん
2011/07/06(水) 01:41:25.18ぜんぜん高度じゃねぇwww
0759デフォルトの名無しさん
2011/07/06(水) 01:41:36.34可能かどうかじゃなくて、大変かどうかだろw
お前やってみたことあるのか?
関数分割は、単純にコピペすればいいって話じゃない。
関数で使われている変数をどうやって渡すかという話が残っている。
Eclipseを使えば数十行あるコードの中で使われているローカル変数を
ただしく、引数と戻り値に置き換えてくれるんだぞ。
動的言語だと、一行一行みて変数を引数に置き換えていかなければいけない。
0760デフォルトの名無しさん
2011/07/06(水) 01:42:55.94だから、それが何で変数の型付けと関係あるの?
変数のスコープが関係するのは分かるが
0761デフォルトの名無しさん
2011/07/06(水) 01:43:38.75プロジェクト内の複数のクラスでgetというメソッド名が使われていたとする。
このプロジェクトの中から○クラスのgetだけを抽出する方法を
grepで、grepで、教えてください。
重要なので二回言いました。
0762デフォルトの名無しさん
2011/07/06(水) 01:45:54.91変数の型付けとは関係ないよ。
でも、静的言語の話だろ?
静的言語は、変数の型付け以外の機能も持ってるんだよ。
静的型付け言語ではなく、静的言語ね。
コンパイラ(IDE)がコードを理解しているというのは
それだけコンパイラがコーディングのサポートを出来るということ
0763デフォルトの名無しさん
2011/07/06(水) 01:47:36.56実際、getter / setter を変える事ってあんまり無くね?
それが静的言語の最大のメリットなの?
get の rename が?
0764デフォルトの名無しさん
2011/07/06(水) 01:48:02.10オブジェクトモデルなどという考え方自体が、実に馬鹿げてると思う。
物事を単純化しようとした結果、逆に複雑になってしまってる典型例だと思う。
一見しただけだと、単純化したように見えるので(ほら!同じ名前のメソッドで、いろんなオブジェクトを同じ操作で使えるよ!など)
なんとなく簡単になったように錯覚してるだけだと思う。
実は、この代償として、とんでもないデバッグの難解さを含めてしまってるのに。
実際は、多態性によって、分岐と、その組み合わせの可能性が爆発的に増えるのだから、
デバッグ時の推論すべき量も指数関数的に増えてしまう。
これがプログラム全体で行われるとしたら、まさに保守の悪夢だとしか思えない。
個人的に思うのは、
言語や、設計や、思想をいくら捻ったところで、
ある問題自体に含まれる潜在的な複雑性ってのは、けして消せないし、どんな組み方をしても形を変えてソースに残りつづけるような気がする。
ポリモフィズムのようなものは、その潜在的な複雑性を、単にデバッグの段階まで押しやってるだけな気がする。
だから一見ソースが単純明快になったように感じるけど、逆にその単純さがデバッグの時には複雑性として襲いかかってくるのだから、結局+ー0なのだと思う。
いたずらに単純さや明解さを謳う新たな言語や設計思想が現れたとしても、永久機関の話のように怪しいと思って疑った方がいいと思う。絶対にどこかに皺寄せが行ってるはずだと。
0765デフォルトの名無しさん
2011/07/06(水) 01:48:43.46質問の内容は正しく理解しましたか?
grepで教えてください。
0766デフォルトの名無しさん
2011/07/06(水) 01:48:53.95>それに今までmethodAを呼びだしていたのに、その一部のmethodNだけでよいとか
>methodMだけでよいとかそういう修正が入ることはまず無いと思うんだが?
>こんなことをしたら動きが変わってしまうのでこれはリファクタリングにはならないはず。
>動作の修正はもちろん人間がやるべきところだよ。
コードの修正の大部分はそういう作業だと思うんだけど、
IDEの自動化はあまり役に立たないみたいね...
0767デフォルトの名無しさん
2011/07/06(水) 01:49:39.39いえいえ、どうぞ get を置換する作業を続けて下さい
0768デフォルトの名無しさん
2011/07/06(水) 01:50:19.64動的言語でも型付け以外は静的に構文検査出来る以上、
型付けが関係ないなら違いは無いよ
0769デフォルトの名無しさん
2011/07/06(水) 01:50:25.25お前は置換することしか思いつかないのか?w
grepするときは、コードがどこから呼び出されているか
知りたいとかあるだろ?
お前さてはgrep使ったこと無いな?
0770デフォルトの名無しさん
2011/07/06(水) 01:52:17.64> 動的言語でも型付け以外は静的に構文検査出来る以上、
> 型付けが関係ないなら違いは無いよ
できるできないが問題じゃなくて、どれくらい出来るかということが重要。
動的言語は構文検査機能が貧弱なんだよ。
なぜならオブジェクトとメソッドの関係が薄いから
ただしくコードを理解することができない。
実行時にならないと分からない情報が多いし。
0771デフォルトの名無しさん
2011/07/06(水) 01:53:06.76> コードの修正の大部分はそういう作業だと思うんだけど、
> IDEの自動化はあまり役に立たないみたいね...
いや、だから機械で出来る部分が簡単になる分
人間の負担が減ってるでしょ?
0772デフォルトの名無しさん
2011/07/06(水) 01:54:41.75俺は getter で検索なんてしないけど、君はするの?
0773デフォルトの名無しさん
2011/07/06(水) 01:55:49.47俺の仕事だって思っているから
それを機械化されると、こまるんだろうな。
0774デフォルトの名無しさん
2011/07/06(水) 01:55:51.52そんな些末な所で得しても嬉しくないんだけど...
道で5円拾っても嬉しくないでしょ
0775デフォルトの名無しさん
2011/07/06(水) 01:57:27.600776デフォルトの名無しさん
2011/07/06(水) 01:57:29.52じゃあ、君がこの間検索した関数名でいいよ。
0777デフォルトの名無しさん
2011/07/06(水) 01:57:46.29> なぜならオブジェクトとメソッドの関係が薄いから
これはまさに型付けの問題だよね?
で、duck typing がIDEによるメソッドの抽出/分解と何の関係があるの?
0778デフォルトの名無しさん
2011/07/06(水) 01:58:26.31> そんな些末な所で得しても嬉しくないんだけど...
>
> 道で5円拾っても嬉しくないでしょ
5円だという根拠は?
0779デフォルトの名無しさん
2011/07/06(水) 02:00:08.160780デフォルトの名無しさん
2011/07/06(水) 02:03:12.57> で、duck typing がIDEによるメソッドの抽出/分解と何の関係があるの?
まずmethodAをmethodNとmethodMに分割する。
そしてmethodAが消える。
だがmethodAが他の場所から使われているかもしれない。
duck typingのせいで、methodAという呼び出しを見つけたとしても、
これが本当に今変更した(無くなった)methodAなのかわからない。
名前が同じだけど別物かもしれない。
で、grepじゃ正しく検索できないって話つながるわけかw
0781デフォルトの名無しさん
2011/07/06(水) 02:04:34.81静的型付けでも methodN に置き換えるのか methodM に置き換えるのか
決定できないから自動化は出来ませんねえ
0782デフォルトの名無しさん
2011/07/06(水) 02:06:44.32自動化ができるところとできないところを区別しよう。
それともお前は人間が要らなくなることを期待してるのか?
0783デフォルトの名無しさん
2011/07/06(水) 02:07:30.81自動化できない所 → その他沢山
0784デフォルトの名無しさん
2011/07/06(水) 02:08:10.73なぜ今リネーム以外の例が出てるのに、
それをかたくなに見なかったことにしてるの?
わざと?
ねぇ、わ・ざ・と♪?
0785デフォルトの名無しさん
2011/07/06(水) 02:08:57.91getter の検索の話?
そっちでせめても無駄だと思うけどね...
0786デフォルトの名無しさん
2011/07/06(水) 02:10:22.17関数統合分割するときにも
高いメソッド識別能力が必要ってことだよ。
同じ単語を出すだけのgrep程度では話にならない
0787デフォルトの名無しさん
2011/07/06(水) 02:10:26.03そうしないならmethodAを消す必要ないじゃん
methodMとmethodNに分割し、methodAからmethodMとmethodNを呼ぶように
書き換えたら良いだけ
0788デフォルトの名無しさん
2011/07/06(水) 02:10:57.35だから分割は無理じゃん...
0789デフォルトの名無しさん
2011/07/06(水) 02:12:14.58消す理由はコードの見通しを良くするためだよ。
無駄なコードを無くしてきれいにすることは、
汚いコードを残したままにするというのとは対極にある考え。
0790デフォルトの名無しさん
2011/07/06(水) 02:12:21.91それリファクタリングとして意味あるの?
0791デフォルトの名無しさん
2011/07/06(水) 02:13:54.61privateメソッドだと動的言語でもリネーム出来ちゃうからね
0792デフォルトの名無しさん
2011/07/06(水) 02:14:57.44よく分かった。
一見関係ないように見えることでも
名前を意味論的に正しく認識出来るってことは
重要なんだね。
動的言語では、たぶんこれ以上のコードをコンピュータが
理解することはできないと思う。限界。
0793デフォルトの名無しさん
2011/07/06(水) 02:15:33.48methodAが読み易くなるなら意味がある
むしろ、methodAをmethodMとmethodNの両方呼ぶように書き換えることに
メリットあるのか?
0794デフォルトの名無しさん
2011/07/06(水) 02:15:44.09まだリネームにこだわってるのかw
もう終わったぞ。
0795デフォルトの名無しさん
2011/07/06(水) 02:16:35.17> むしろ、methodAをmethodMとmethodNの両方呼ぶように書き換えることに
> メリットあるのか?
あるよ。methodAの中身がすごく長くなってしまった場合とか。
そもそもメソッドを分割したいってのは
動的言語厨がいいだした話だと思うがw
0796デフォルトの名無しさん
2011/07/06(水) 02:21:17.85はあ?
methodAが長くなったときに、その中身を分割するのは
読み易くするのに意味があるよ?
でも、呼び出し側を二つに分割して両方呼び出すのに何のメリットがあるの?
0797デフォルトの名無しさん
2011/07/06(水) 02:26:05.51いやぁ、だって普段publicなインターフェースをコロコロ変更しないからさ
静的言語で開発してる時でもさ
0798デフォルトの名無しさん
2011/07/06(水) 02:28:05.17メリットあるから二つに分割したいって
動的厨が書いたんじゃないのか?w
0799デフォルトの名無しさん
2011/07/06(水) 02:29:19.94コロコロ変更しないというか、
この程度のことでも変更したら、問題が発生するから
動的言語ではやれないってだけじゃないのか?
メソッドを使用している場所すら的確に
判断できないんだからね。
そりゃトラブルおきるよw
0800デフォルトの名無しさん
2011/07/06(水) 02:32:11.58「動いているコードを修正するな!」が原則だからな。
一度リリースしてしまえば完成な時代ならともかく、
今は「動いているコードを修正しながら改良させていく時代」なので
修正のしやすさの重要性はかなり高い。
0801デフォルトの名無しさん
2011/07/06(水) 02:34:26.90ちゃんと>>787読んでるか?読んでも理解出来ないのか?
methodAを二つの関数methodMとmethodNに分割し、
methodAをそれら二つの関数を呼ぶように書き換える
これはmethodAが読み易くなる場合があるから
分割すること自体は意味がある
一方、methodAを呼び出してる側のコードについて、
もしmethodMとmethodNの両方を呼び出すなら、
そのままmethodAを呼べば良いって言ってんの
0802デフォルトの名無しさん
2011/07/06(水) 02:38:35.10「公開インターフェースはシステムの振る舞いと見なされる」から
変更するのはリファクタリングじゃないんだけどね
まあ、publicメソッド = 公開インターフェースかどうかは状況依存で、
オープンソースだと殆どイコールだけど
インハウスだと公開インターフェース?何それ?状態だよね
0803デフォルトの名無しさん
2011/07/06(水) 02:44:18.69それはメソッドのインライン化の目的を聞いているわけだよね?
リファクタリング本にその答えは書いてあるけど。
ぐぐれば見つかると思うけど、
手元にある本には、
「わざわざ名前をつけなくても意図が明らかなメソッドがある。」
という理由が書いてあるね。
こうやってインライン化することでメソッドの数が減らせるとも書いてある。
0804デフォルトの名無しさん
2011/07/06(水) 02:46:54.01そういう場合にも、これは本当に公開インターフェースであるべきなのか?
ってときも、privateにしてしまえば、
静的言語なら、コンパイルエラーでわかるし、
いろいろ便利なのにね。
0805デフォルトの名無しさん
2011/07/06(水) 03:11:09.57extract方向の、いわば抽象化のメリットは分かるけどinline化が
読み易さに貢献するとは思えないんだよね
特にpublicメソッドの中身を他のクラスのメソッド内に展開するメリットがね
動的言語だと、しょうもない関数はメソッドにせず最初からクロージャで書くからってのもある
それに、名前を一意に変換できない以上、
そのメソッド名は複数のクラスで定義されていて、namespace等では
判別不能な程ありふれてる名前なんだよね?getとかpushとかさ
そんな重要な名前を後でinline化するようなメソッドに付けるなよw
0806デフォルトの名無しさん
2011/07/06(水) 03:12:01.39> オープンソースだと殆どイコールだけど
それはオープンソースの ”クラスライブラリ” の話だな。
オープンソースでもプロジェクト内で閉じたクラス
(プロジェクト外で使うことを想定されてないクラス)なら
publicメソッドを変更してはいけない理由なんて無いし。
というか、大抵のアプリはライブラリ以外は
外部のプロジェクトで使われることを想定してないんじゃないか?
0807デフォルトの名無しさん
2011/07/06(水) 03:13:39.31なぜクロージャーがメソッドの代わりになるの?
変な使い方してそうだなw
> そんな重要な名前を後でinline化するようなメソッドに付けるなよw
未来のことは誰にもわかりませんよw
0808デフォルトの名無しさん
2011/07/06(水) 03:17:31.87名前付けるまでもない処理を纏めるのにクロージャ使うだろ
え?クロージャのある言語使ったこと無いの?
0809デフォルトの名無しさん
2011/07/06(水) 03:19:07.17え? 長い関数の代わりに
クロージャーを使うんでしょ?
methodAは長い関数、だから分割するって話なんだし。
0810デフォルトの名無しさん
2011/07/06(水) 03:23:20.06{
まとめたい処理
}
ってやればいいだけだと思うが?
0811デフォルトの名無しさん
2011/07/06(水) 03:23:52.14クロージャについてはinline化一般について言ってた
確かに長い関数についてはクロージャは使わん
でも、長い関数でかつ複数のクラスで使われてるようなメソッド名が
「わざわざ名前をつけなくても意図が明らかなメソッドがある」に
該当するとは思えない
具体例を挙げてくれれば納得もするが
0812デフォルトの名無しさん
2011/07/06(水) 03:25:12.16長い関数をリファクタリングした結果
もともとの関数が極端に短くなってしまった場合の話だろ。
0813デフォルトの名無しさん
2011/07/06(水) 03:26:48.40ですよねw
クロージャーは他の関数に渡すときに使うけど、
まとめたいだけには使わないなぁwww
0814デフォルトの名無しさん
2011/07/06(水) 03:26:59.83変数のスコープを分けたいけどブロックが深くなるのを嫌うときや、
同じ処理が(ループではなくて)複数回呼ばれるときとか、
クロージャ使う場面はいくらでもある
0815デフォルトの名無しさん
2011/07/06(水) 03:27:50.82クロージャ使っても深くなるだろw
0816デフォルトの名無しさん
2011/07/06(水) 03:28:28.27纏めるだけの話限定なw
0817デフォルトの名無しさん
2011/07/06(水) 03:29:15.79へー、メソッドを消すかどうかを
意味的に分かり易いかどうかじゃなくて
「関数が長いかどうか」で決めるんだ?
複数のクラスで定義されてるような重要な名前のメソッドなのに?
0818デフォルトの名無しさん
2011/07/06(水) 03:30:46.18def f():
def g(x):
print x
for i in range(100):
for j in range(100):
for k in range(100):
g(k)
0819デフォルトの名無しさん
2011/07/06(水) 03:31:34.94> ぐぐれば見つかると思うけど、
> 手元にある本には、
> 「わざわざ名前をつけなくても意図が明らかなメソッドがある。」
> という理由が書いてあるね。
消すとしたら必然的に短い関数になるだろ。
使われ方じゃなくて、関数名で消すかどうか
決めるほうがおかしい。
0820デフォルトの名無しさん
2011/07/06(水) 03:32:41.19今は、「関数まとめるだけのためにクロージャーを使う」限定。
0821デフォルトの名無しさん
2011/07/06(水) 03:33:51.31「名前付けるまでもない処理を纏めるのにクロージャ使う」限定
0822デフォルトの名無しさん
2011/07/06(水) 03:35:31.77短い関数であることは必要条件であって十分条件じゃない
関数名はどう抽象化してるかを表してるんだから
リファクタリングにおいて消すかどうかに名前が重要なのは当たり前
目的は「コードを分かり易くすること」だぞ?
0823デフォルトの名無しさん
2011/07/06(水) 03:36:21.190824デフォルトの名無しさん
2011/07/06(水) 03:38:12.43必要条件・・・短い関数じゃない
十分条件・・・「わざわざ名前をつけなくても意図が明らかなメソッドがある。」
これで十分条件を満たしたが、
お前はの反論は、反論になってるのか?
名前がどうしたって?
それなに条件だよ?w
0825デフォルトの名無しさん
2011/07/06(水) 03:38:52.38名前だけでは十分条件に成り得ないのは
論理的に考えて分かるだろ?
0826デフォルトの名無しさん
2011/07/06(水) 03:40:05.13名前が重要だからってのは
いったい何の条件なんだ?
0827デフォルトの名無しさん
2011/07/06(水) 03:43:48.96主張は簡単だよ
複数のクラスで同じ名前が定義されてて、publicメソッドで、もともとは長い関数だった
そういう関数で「わざわざ名前をつけなくても意図が明らかなメソッド」であって
かつinline化したほうが分かり易くなる例はあるのか?ってだけ
個人的な経験として例が思い浮かばないだけだから、具体例があれば納得する
0828デフォルトの名無しさん
2011/07/06(水) 03:44:09.49> へー、メソッドを消すかどうかを
略
> 複数のクラスで定義されてるような重要な名前のメソッドなのに?
今消すと行っているメソッド名はmethodAだぞ。
複数のクラスで定義されているような重要な名前か?
0829デフォルトの名無しさん
2011/07/06(水) 03:46:06.88複数のクラスで定義されてないなら
動的言語でも安全に書き換えられるね
0830デフォルトの名無しさん
2011/07/06(水) 03:46:43.62お前話がごっちゃになってるだろw
> 複数のクラスで同じ名前が定義されてて、publicメソッドで、もともとは長い関数だった
消すという話になってるメソッド名はmethodA。
複数のクラスで同じ名前が定義されてるのは別の話。
0831デフォルトの名無しさん
2011/07/06(水) 03:48:59.95> 複数のクラスで定義されてないなら
> 動的言語でも安全に書き換えられるね
一番の問題点、
複数のクラスで定義されてない、
duck typingで呼び出されることもない、
実行時に追加されることもないってのを
どうやって証明するかってのを解決出来ればなw
それができないから動的言語は駄目で
実行しなくても分かる静的言語がいいって流れだろ・・・
0832デフォルトの名無しさん
2011/07/06(水) 03:52:39.03複数のクラスで/実行時に定義されてないかはgrepで分かるだろwww
0833デフォルトの名無しさん
2011/07/06(水) 05:30:53.590834デフォルトの名無しさん
2011/07/06(水) 07:18:28.58もうちょっと書き方を考えるべきだったか
俺が眠気眼で「仕様がコロコロ変わる」っつーたのは
そもそも要求仕様が固まっていないレベルな
0835デフォルトの名無しさん
2011/07/06(水) 07:53:42.05あとリファクタを話すならsmalltalkの事もたまには思い出してやってください。
0836デフォルトの名無しさん
2011/07/06(水) 08:13:35.77なぜ、お手本がないと安全なソフトは作れないのかというと、
相対的に優劣をつけることしかできないからだろう。
絶対的な安全が保証できるなら他のものと比較する必要はない。
0837天使 ◆uL5esZLBSE
2011/07/06(水) 08:20:39.64変数に$ついてる言語触ってるって事だよね
いちいちSHIFT+4キーおして $ 打ちまくってる感触はどう?
死ねゴミ
0838デフォルトの名無しさん
2011/07/06(水) 08:27:07.77問題は、そのテストコードが信用できるかでしょ?
テストコードはバグがあることを証明できても
バグがないことは証明できない。
テストコードそのものが不足していれば、
その部分のテストはできない。
0839デフォルトの名無しさん
2011/07/06(水) 08:30:02.41> 複数のクラスで/実行時に定義されてないかはgrepで分かるだろwww
関数名でgrepする。
もしその関数が一つしか見つからなかったら話は簡単。
でも普通は複数見つかる。
複数見つかったとき、これが複数のクラスで定義された関数なのか
それとも一つのクラスの関数なのか、それを見分けることはできない。
0840デフォルトの名無しさん
2011/07/06(水) 12:05:13.15vistaを思いついた瞬間にxpを消すようなやつが安全なわけがない
0841デフォルトの名無しさん
2011/07/06(水) 14:02:55.64変数の型付けが静的だろうが動的だろうが、クラス定義はあるわけで
そこ見れば同じ名前のメソッドが複数のクラスで定義されてるか分かるだろう
まったく意味不明過ぎる
Java以外使ったこと無いから想像で書いてるだろ
0842デフォルトの名無しさん
2011/07/06(水) 14:43:11.84土方ときたらしょーがねーな
http://download.oracle.com/javase/6/docs/api/deprecated-list.html
0843デフォルトの名無しさん
2011/07/06(水) 20:14:15.83「型整合が検査できればバグのほとんどを発見できる」とか
視野が狭いとしか言いようがない。
バグの過半数は仕様の間違いと仕様の間違った理解が原因だ。
0844デフォルトの名無しさん
2011/07/06(水) 20:22:58.32後者はともかく、前者は間違ってても仕様は仕様だろ
良くあるだろ?
これバグじゃね?不具合じゃね?と聞いたら「仕様です」って答えが帰ってくるの。あれだよ
0845デフォルトの名無しさん
2011/07/06(水) 20:51:06.06動的型付け言語がこれだけ普及している中で、静的型付けが無いと
仕事ができないと主張するには、それくらいの事は言わないとな
設計意図にまつわるバグについては、一切無視
話題がそちらの方向に向かいそうになったら、全力阻止
0846デフォルトの名無しさん
2011/07/06(水) 23:14:07.49> 変数の型付けが静的だろうが動的だろうが、クラス定義はあるわけで
> そこ見れば同じ名前のメソッドが複数のクラスで定義されてるか分かるだろう
的外れ。
問題は同じ名前のメソッドが複数のクラスで定義されていることを知った後の話だよ。
たとえばfooという名前のメソッドが複数のクラスで定義されていました。
さてobject.foo() はどのクラスのfoo()でしょうか?
grepしたらfoo()を使っている所が50箇所見つかりました。
あなたはどうやって、fooとクラスの対応表を作りますか?
0847デフォルトの名無しさん
2011/07/06(水) 23:15:18.89> 静的型厨がよく言う
> 「型整合が検査できればバグのほとんどを発見できる」とか
あ、それ捏造だよw
俺がついた嘘。
0848デフォルトの名無しさん
2011/07/06(水) 23:22:05.93聞くのは動的言語よりバグを発見しやすいとかそんな感じ
0849デフォルトの名無しさん
2011/07/06(水) 23:23:44.72聞かないことはないだろ。
絶対聞いたことがあるはずだ。
なぜなら俺が言ったからね。(ただし捏造w)
0850デフォルトの名無しさん
2011/07/06(水) 23:24:00.38コンパイルが通ればかなり安心できる
びっくりするぐらいまともに動く
もっとも、コードが意味的に間違っているケースは検出できないので
まあそこは仕方ない、テストが必要だよねっていう感じ
0851デフォルトの名無しさん
2011/07/06(水) 23:30:51.57実行時テスト(動的テスト)に分けるという考え方があるよ。
動的テストは実際に動かさないといけない。
ソフトウェアが自動的に動くことはなく、
人間が動かさないといけない(コードを書いて動かすのも含む)
そうなるとテスト作成のための時間がかかるし品質は人間に依存してくる。
静的テストは動かさない状態でやるので
ソフトウェアで自動化できる。
静的テストで完全にテストできるわけではないけれど
動的テストでやる作業を減らすことはできる。
0852デフォルトの名無しさん
2011/07/06(水) 23:40:45.51そのメソッドを持つクラス全てが対象となり得る、でよくね
0853デフォルトの名無しさん
2011/07/06(水) 23:46:23.980854デフォルトの名無しさん
2011/07/07(木) 00:18:03.650855デフォルトの名無しさん
2011/07/07(木) 00:28:21.67・動的型付け言語を使うと能率が上がるプログラマ
・静的型付けじゃないと文句を言うプログラマ
・動的型付けでも静的型付けでもガシガシコードを書くプログラマ
どれになりたい?
0856デフォルトの名無しさん
2011/07/07(木) 00:29:57.520857デフォルトの名無しさん
2011/07/07(木) 02:29:53.40能率は上がらない
> ・静的型付けじゃないと文句を言うプログラマ
静的言語が優れていると言ってるだけ、それに文句を付けてるのが(ry
> ・動的型付けでも静的型付けでもガシガシコードを書くプログラマ
ガシガシコードを書き、そして静的言語の優位性を語ってる。
両方使っているからよく分かってる。
0858デフォルトの名無しさん
2011/07/07(木) 02:35:15.18ひとつも出てなかったよね。
0859デフォルトの名無しさん
2011/07/07(木) 02:56:10.44別にOOがプログラミングを単純化したと主張している人はいないと思うけど。
分析・設計行程ややこしくなったけど、それに見合うメリットが存在しているから使っているだけ。
組み合わせ爆発は杞憂というやつだと思う。
可能性だけで存在しない組み合わせまではテストは必要ないわけだし。
foo(Hoge hoge)というシグネチャのメソッドがあったとして、
hogeオブジェクトにはHoge型としての振る舞いが期待される。
fooメソッドを使う場合には、それを満たすオブジェクトを渡すべきなわけ。
親クラスとは全く異なる妙な挙動をするサブクラスのことなどは気にする必要はない。
C言語でも型キャストすればコンパイル通るけど、
例えばintをdoubleに型キャストして引数渡されたときの挙動まで面倒みないよね?
0860デフォルトの名無しさん
2011/07/07(木) 06:50:45.76動的型言語の良さは、書き起こしやすさだと思う
型の依存関係、整合性はおぼろげなままでやってける
型変換は自動で済ませられる部分はそれでいいし
ライブラリもベスト・エフォート型が大半を占める
古き時代からメモリ管理は自動が当たり前だったからそれもほぼ無い
だからこそ、最もプログラミングの本質的な部分に集中出来るのよ
アルゴリズムだったり、フローだったりするが
思考が本質以外の部分に寸断されることが少ない、だからこそ書き起こしに向く
その上で厳密性を持たせたい部分には持たせられるから
安全なコードだって充分に書けるしな
多人数開発に静的型言語のが良いのは分からんでもないよ
ただ思考は寸断されたくないな、そここそがプログラミングの本質なんだから
0861デフォルトの名無しさん
2011/07/07(木) 07:18:47.78クロージャについて>>813>>815みたいなアホなこと書くやつが
動的言語でガシガシ書いたことあるはず無いだろw
それに型付けとスコープも混同してるし>>759、
型付けの強弱と静的動的の違いも分かってない>>562
まさにJava以外のプログラミングというものを理解してない真性の土方だよ
0862デフォルトの名無しさん
2011/07/07(木) 07:22:25.70Pythonの場合だと多態が必要無い場合は
普通の関数を定義することが多い(OOP機能が後付けだからかもしれん)
関数はモジュール名+関数名で一意に定まるから
まさに grep module.func * が機能する
0863デフォルトの名無しさん
2011/07/07(木) 09:13:14.62どの動的言語でガシガシコードを書いてたのか詳しく
0864デフォルトの名無しさん
2011/07/07(木) 14:18:53.64何が的外れだアホ
無知をばらされたからって勝手に問題設定変えるな
0865デフォルトの名無しさん
2011/07/07(木) 14:48:16.52それより>>863のが面白そう
0866デフォルトの名無しさん
2011/07/07(木) 14:52:20.83型推論付きの静的なら思考の妨げなく書きなぐれるよ
0867デフォルトの名無しさん
2011/07/07(木) 15:58:38.34Haskellはそうゆうところあるよね。構造体の記述にしてもあれほど
素直な言語はないかもしれない。
Lisp系もそうだけど>>860のイッてることはよく分かるよ。Lisp系なら最適化
するときに型をつけ出すから。最初の思考をまとめる過程と最適化する
過程が上手に分けられるのが魅力だよね。Java/C++とかって、くだらない
雑務的プログラミングが多すぎてイラッとくる所がある。あんな
スパゲティーメイカーのどこがええねんと思うもの。
LispにしてもHaskellにしても少人数向けだとよく言われてるよね。
経験的に言えるけど、LispやHaskellって記述する前に熟考すること
のほうが多い。考える時間のほうが長い言語だってのは誰かが言ってた
けどそのとおりだよ。
Javaとかがなんで大人数向けなんかよく知らんねんけど。
0868デフォルトの名無しさん
2011/07/07(木) 16:05:33.01"最小単位"をしっかり分けられる人だよね。ひとつの関数に
いくつものことをやらせる人は効率は上がらないし、そうゆう人
って手続き型の癖が抜けてないとも言える。
いずにしても最初は最小単位で上手に作って、トレースと
プロファイラを使って段々完成へと固めていくってなるよね。
最適化の結果なら別だけど、ひとつの関数に5行以上かける
というのは関数型言語のプログラミングに慣れていないと考
えていいよ。
その結果関数が山ほど作られるから、大人数だと把握が大変
になるってのは少人数向けになりやすい結果なんだろうね。
0869大天使 ◆uL5esZLBSE
2011/07/07(木) 17:48:22.42つうかいつものHaskell野朗か死ね
0870大天使 ◆uL5esZLBSE
2011/07/07(木) 18:00:55.33頭が悪いんだったら、世の中で一番、多くの人が使ってる道具使ってればいいんだよ
わざわざユーザー少ないもの触っても、平均以下にしかなれねーよ
使用ユーザー数が少ないけど、実は先進的なもの っていうのは存在する
しかしwwwwwww それは関数型言語ではないwwwww
関数型言語は、もう1980年代に終わってる
ゴミ言語さわっていることを自慢されても
分かってる奴の前では、関数型なんてほざいても大恥かくだけだから、黙ったほうが良い
0871デフォルトの名無しさん
2011/07/07(木) 18:25:34.230872デフォルトの名無しさん
2011/07/07(木) 18:50:21.19いつもの〜と言ってるけど、誰のことを指してるかわからん。
というより、知性がなさそうなコメントを見てると変なのに絡まれたな
というのが率直な気分ですね。
0873デフォルトの名無しさん
2011/07/07(木) 19:08:29.81型推論のある関数型言語がベストっていうのは、
個人的にはその結論でも良いと思うんだけど
このスレで暴れてるJava土方がその結論で納得するかね?
0874デフォルトの名無しさん
2011/07/07(木) 19:16:20.70原理主義者になってしまったら、結論ありきで論争をするからね。
無視していいと思うよ。<JAVA土方
0875デフォルトの名無しさん
2011/07/07(木) 19:23:07.440876デフォルトの名無しさん
2011/07/07(木) 19:28:37.04そこまで高階関数たんをdisらなくても…
0877デフォルトの名無しさん
2011/07/07(木) 19:30:11.73むしろ、ベタ褒めに見えるがw
0878デフォルトの名無しさん
2011/07/07(木) 19:46:53.83だから単機能=沢山必要なんて馬鹿なカンチガイしている
0879デフォルトの名無しさん
2011/07/07(木) 19:49:08.16残念
>>877は私だが、今日はこのスレに初めて書き込んだ
0881デフォルトの名無しさん
2011/07/07(木) 19:57:13.76おっと、内容に言及してなかった
自分は高階関数を活かす関数作りの事言ってるのかと思ったんだが
0882デフォルトの名無しさん
2011/07/07(木) 19:58:14.21型の整合性は意識するけどね
でもそこが良い
0883デフォルトの名無しさん
2011/07/07(木) 20:02:22.23わりと同意だけどケースバイケースな気がするな
>>60の例、C++だと>>135なんだが、C++における型の明示が
思考の妨げになってる気はしない
実際にはC++のコードに現れているようなネストされた辞書構造を
頭の中では考えているし、それを直接見たままに
表現しているC++のコードは(俺の感覚では)>>60よりずっと直接的で明快だ
まあ言語としてのC++を持ち上げる気持ちは毛頭ないけど……w
逆に、複雑でジェネリックなな高階関数みたいなものなら
型指定を避けたい気持ちは強いなぁ
0884デフォルトの名無しさん
2011/07/07(木) 20:02:33.04高階関数も無名関数として使っていれば、複雑なことを関数の中に
記述はできるしそれも良いんだけどね。これもなるべくシンプルに
という事は大切だよ。無名関数を組み込むときに大きなものを作る
のはその人のセンスの問題だと思うから、そんなに長くはならないよ。
高階関数を使って関数を返す関数を作れる人はやっぱり簡潔に書け
るようになるから>>868は別に矛盾しないんだよ。
行数が多くなるとしたら、Lispのマクロをいじる場合は仕方がないね。
これで複数のマクロや関数を作るマクロなんて作り出したらね。
これもコツがいるんだけど、抽象化による所が大きいそのために
熟考が必要になってくる。
0885デフォルトの名無しさん
2011/07/07(木) 20:10:59.23でも関数内で関数定義したりパターンマッチしたりすれば
普通に5行は超えるから、>>868は言い過ぎじゃね?
しょーもない関数でグローバルな名前空間使いたくないしさ
副作用のある式が5行以内なら納得する
0886デフォルトの名無しさん
2011/07/07(木) 20:13:55.71パターンマッチは行を使うねぇ。それはそのとおりだわ。
0887デフォルトの名無しさん
2011/07/07(木) 20:16:01.20let/whereはともかく、パターンマッチで5行超えるのは滅多に無い気が。。。
0888デフォルトの名無しさん
2011/07/07(木) 20:29:01.34細かく条件分岐してると5行超えるねぇ
0889デフォルトの名無しさん
2011/07/07(木) 20:33:27.52lispは知らんが、OCamlならパターンマッチとガード併用で複雑な分岐も対応出来るだろ
0890デフォルトの名無しさん
2011/07/07(木) 21:05:59.355行超えるような複雑な分岐に対応できるって言ってんじゃね?
0891デフォルトの名無しさん
2011/07/07(木) 21:16:11.13判定おながい
0892デフォルトの名無しさん
2011/07/07(木) 22:29:22.50正規表現つかいまくりだからだろうね。
ただの文字列比較でいいのに
正規表現使うから。
0893デフォルトの名無しさん
2011/07/07(木) 22:33:39.03動的言語だからって正規表現が使えるものばかりじゃないぞ
0894デフォルトの名無しさん
2011/07/07(木) 22:38:17.86それは違うんじゃないか
テキスト処理はむしろ動的言語が得意な部類で、数値計算とかが圧倒的に遅い感じだ
0895デフォルトの名無しさん
2011/07/07(木) 22:44:10.36元のソースをそのままに、実行時に修正できるところ。
便利なんだけどただこれのテクニックを仕事で使うかといえば微妙。
0896デフォルトの名無しさん
2011/07/07(木) 23:27:25.13静的言語で書かれたライブラリを呼び出すだけなんだから
遅くはならないわな
0897デフォルトの名無しさん
2011/07/07(木) 23:29:47.29言いたいことは>>890
そして条件分岐は可能な限りヴァリアント+パターンマッチを使って
型チェックを酷使するのが俺のジャスティス
0898デフォルトの名無しさん
2011/07/08(金) 02:20:18.81ライブラリは言語のパッケージ管理システムでインストールしているとき、
インストール済みのコードを直接修正したくないので
(修正バージョンのライブラリをプロジェクト用のSCMで抱えるのはなるべく避けたい)、
アプリ側コードの一部としてモンキーパッチで不具合を修正というのはたまに仕事でもやる。
0899デフォルトの名無しさん
2011/07/08(金) 07:38:29.07インタプリタになってる動的言語だったら数値計算が遅いのは当然
なんだが、その部分だけCのライブラリを活用しているものはおおい
よね。PDLしかりNumpyしかり。。正規表現も同じだよね。
でも、動的コンパイラ言語はまた別だよ。Common Lispのことは一度
調べておいたらいい。ちなみにCommonLispの正規表現ライブラリは
clppcreが有名だけど、純Common Lisp製でC製の正規表現ライブラリ
のPerlより速いというのは有名な話。
0900大天使 ◆uL5esZLBSE
2011/07/08(金) 14:03:00.88CLは速いってネットの隅っこでは言われてるけど一般人はCLの知識なんてねーよ
100人つかまえて1人知っているかどうかなものを、あげられて 有名(キリッ)とかいわれても
おもいっきし キリッ じゃん
0901デフォルトの名無しさん
2011/07/09(土) 07:03:25.30これの命題が真か偽か判断するには悪いの定義が必要だ
0902デフォルトの名無しさん
2011/07/09(土) 07:31:24.02アレがある種の局面で高速だと言われるのは
Common Lispでは型を付けられることと、コンパイラマクロを使えるのが要因であって
動的であることはあまりお関係ない
例えば、C++のテンプレートなら
同様に型付きで事前計算ができる
型ヒントのない動的型付けコンパイル言語というと、ErlangのHiPEとかだが
shootoutを見ると、静的型付け言語よりは一回り遅くなる傾向のようだ
0903デフォルトの名無しさん
2011/07/09(土) 08:17:04.06知っておいたらいいんだよ。実際速度はC並にできるからね。ただ
高速にすると安全性も低下するからトレードオフを良く考えない
といけないがね。
型を付けないというのは遅くなるというのは当然なんだけど、その反面
柔軟性が得られることが捨てがたいポイントなんだよね。
動的言語敷いてCommon Lispの長所はREPLを再起動せずに稼動し続けられる
ところだからメンテで止めることがいらない。更新した関数はそこでそのまま
適用されるから(マクロが絡むと絡んだ関数ももう一度ロードする必要があるが。)
便利なんだよね。でも、ここに危ないところもあるのは事実なんですね。
(やっつけ仕事でバグフィックスした関数を速攻で作っても、その関数を
ファイルに置いておかないとまた同じ失敗を繰り返してそのことを忘れた上で
どこにバグがあるかわからなく混乱することがある。)
ミッションクリティカルなところでCommon Lispはじつは強いと言われるのは
動的コンパイル言語所以なんだけどね。Lisp最強厨が出るのもこの辺絡みなん
だけど、彼らの多くは実際にプログラムを組んでいない。本当はもっと作って
欲しいね。
0904デフォルトの名無しさん
2011/07/09(土) 08:19:20.65一刻を争うようなところで使うものでは無理だよね。だから、大規模な
WebシステムなんてCommon Lisp向けなんだよね。ホントは。
0905デフォルトの名無しさん
2011/07/09(土) 09:43:04.45静的言語では型を付ける恩恵として安全になって速度も上がるのだが
0906デフォルトの名無しさん
2011/07/09(土) 09:57:05.63903が言う文脈では間違っていない
Common Lispで最大限の最適化をしようとすると、
実行時チェックを片っ端から省略することになる
つまりその部分は、安全性もC並になってしまう
0907デフォルトの名無しさん
2011/07/09(土) 09:59:34.480908デフォルトの名無しさん
2011/07/09(土) 10:32:38.36整数演算のオーバーフローは?
配列の境界外アクセスは?
多くの動的型付け言語は実行時チェックを噛ませて
プログラムの状態が未定義にならないようになっている
そういう意味ではCよりは安全
静的型付け言語でも、実行時にチェックを行う言語もある
0909デフォルトの名無しさん
2011/07/09(土) 10:39:05.13>配列の境界外アクセスは?
これらを考慮に入れても
実行時にも型チェックしないのよりは
よほど安全だわ
0910デフォルトの名無しさん
2011/07/09(土) 10:56:52.37どれぐらい低水準かの話で、静的動的はあんまり関係ないような気がする
Cには実行時型情報は何も無いしチェックなどやらない、JavaやC#はやる
0911デフォルトの名無しさん
2011/07/09(土) 11:15:41.80型付けを理解すると死ぬ病気なのか?
0912デフォルトの名無しさん
2011/07/09(土) 11:19:02.33でもそれがいい
0913デフォルトの名無しさん
2011/07/09(土) 11:25:54.84C、Javaを教える学校とかでは計算機科学とか、型理論に触れない事が多いから、「型とはCPU内部でのデータ表現の事」という理解が殆どじゃないかな?
0914デフォルトの名無しさん
2011/07/09(土) 11:27:52.19boost.regexは冗談のように遅かった気が・・・
0915デフォルトの名無しさん
2011/07/09(土) 11:44:31.15「他店の方が安いならば、必ずその値段まで値引きする。ゆえに当店は最も安い。」
みたいな理論だから、計算機科学とか型理論とかぜんぜん関係ないね。
0916デフォルトの名無しさん
2011/07/09(土) 11:44:57.26まとめておこうか。
・間違ったメソッド名を検出できる。
・間違った引数を検出できる。
・間違った戻り値を検出できる。
・仕様変更時に影響がある箇所を検出できる。
・コーディング時に型が持っているメソッド・引数を補完できる。ドキュメントのポップアップ表示もある。
・メソッド・変数名の変更時に、影響がある箇所を検出、自動的に変更できる
・クラスやインターフェースの継承時に、テンプレートを自動作成できる。
言語やエディタによって多少の違いはあるがだいたいこんな所
0917デフォルトの名無しさん
2011/07/09(土) 11:51:47.75X 関係ないね。
O 俺は理解していない。
0918デフォルトの名無しさん
2011/07/09(土) 11:59:36.77実際にその型に対してどんな操作ができるかまったく定義しないから
結局実際の型を見なきゃ何もできないCの型体系が嫌い</ちらし>
0919デフォルトの名無しさん
2011/07/09(土) 12:05:26.90X だいたいこんな所
O 俺はこれだけしか想定していない
0920デフォルトの名無しさん
2011/07/09(土) 12:08:41.10「コンパイル時に」の一言は抜いちゃダメよ
実行時なら動的だろうが出来ることは多いんだから
0921デフォルトの名無しさん
2011/07/09(土) 12:38:38.47>・間違った引数を検出できる。
>・間違った戻り値を検出できる。
間違った、じゃなくて間違った型な
>・仕様変更時に影響がある箇所を検出できる。
曖昧すぎ。仕様変更と一口に言っても色々ある
>・メソッド・変数名の変更時に、影響がある箇所を検出、自動的に変更できる
変数だけなら宣言必須であれば動的型付けでも可能
>・クラスやインターフェースの継承時に、テンプレートを自動作成できる
別に静的型付けだからってわけでは無いし
そもそも動的型付けだとあんまり要る機能ではないと思う
0922デフォルトの名無しさん
2011/07/09(土) 12:45:08.73動的言語には型がないのだから
「間違った型」というものがないよ。
明らかに想定外の値を検出できる。
もし動的言語なら正規表現とかで
関数の頭で引数チェックをするような所。
0923デフォルトの名無しさん
2011/07/09(土) 12:48:08.96(いわゆる)動的言語は変数に型が無いだけで
データ自体は型を持ってるよ
0924デフォルトの名無しさん
2011/07/09(土) 12:50:57.74たとえば関数の引数が一つ追加することになったとき、
定義を一箇所、引数を追加するだけで、
それにともなって修正しなければいけない場所を
瞬時に知ることができる。
0925デフォルトの名無しさん
2011/07/09(土) 12:55:19.75型の無い動的言語ってのを挙げてもらおうか。動的言語と呼ばれる言語の多くは型を持ってるのだが。
0926デフォルトの名無しさん
2011/07/09(土) 13:12:04.53>>911
0927デフォルトの名無しさん
2011/07/09(土) 13:22:25.06動的静的どちらか一方しか使ったことがないと以前農林水産省の統計で
0928デフォルトの名無しさん
2011/07/09(土) 13:29:00.21お前>>857と同一人物だろ
>>863の質問に答えてやれよ
0929デフォルトの名無しさん
2011/07/09(土) 15:31:15.420930デフォルトの名無しさん
2011/07/09(土) 15:36:43.69『型が有るか無いか』と、『動的型付けか静的型付けか』はレイヤーが異なる問題だぞ
最近の動的型付け言語の殆どは型を持っていて、それが実行時に評価されるという仕組み
0931デフォルトの名無しさん
2011/07/09(土) 16:03:04.930932デフォルトの名無しさん
2011/07/09(土) 16:05:24.60それ、コンパイラっていうんじゃあ
0933デフォルトの名無しさん
2011/07/09(土) 16:07:55.190934デフォルトの名無しさん
2011/07/09(土) 16:14:06.050935デフォルトの名無しさん
2011/07/09(土) 16:25:21.19あれじゃ気軽に試すレベルにない
そもそもREPLのない言語ってのは教育的効果が恐ろしく低いんだよ
実際静的言語の質問スレでは単体で完動するコードが貼られることが少ない
これは試すのが面倒だからだ
答える側が面倒なものを質問する側がどうやって
ごめんもう疲れた。煽り口調の文章は自分には無理だとさとった
0936デフォルトの名無しさん
2011/07/09(土) 16:26:44.07いくらコンパイラが優秀でも、
実行前に判別不可能な文法の言語では
どうやっても実行前テストにかけることはできん
0937デフォルトの名無しさん
2011/07/09(土) 16:27:44.62なんでぇー?
0938デフォルトの名無しさん
2011/07/09(土) 16:29:40.14> これは試すのが面倒だからだ
完動することが重要なのか?
0939デフォルトの名無しさん
2011/07/09(土) 16:29:46.160940934
2011/07/09(土) 16:32:14.03他のJVM系のはレスポンスもおそいのかな?
Scala以外のJVM系っていうとGroovyとかClojureとか?
0941デフォルトの名無しさん
2011/07/09(土) 16:33:25.33一行で済むような、些細なコードで困ることなんてまずなく、
どっちみち実用的なコードは
複数行になるんだから。
0942デフォルトの名無しさん
2011/07/09(土) 16:39:44.36Erlangは制限が多くてちと面倒だった
>>940
前試したときはClojureはScalaに比べたら早かった
でもnailgunとか入れてたからだろうなあ
(Scalaは.jar落っことして置いただけ)
0943デフォルトの名無しさん
2011/07/09(土) 16:40:53.89捗らない人が捗らないのは何でだろうな
不思議
0944デフォルトの名無しさん
2011/07/09(土) 16:49:07.47こういう場合にはこうするって決まってるから。
もっと大局(設計レベル)を見ているときはいろいろと
考えることがあるけど、そんなこんな掲示板で書ける程度の
些細なコードで悩まんさw
0945デフォルトの名無しさん
2011/07/09(土) 16:50:43.570946デフォルトの名無しさん
2011/07/09(土) 16:53:45.540947デフォルトの名無しさん
2011/07/09(土) 16:57:23.530948デフォルトの名無しさん
2011/07/09(土) 17:22:48.38一行づつ実行するのも、
エディタに書いて、ショートカットで実行するのも
あまり変わらないから。
一行づつといっても、途中で間違えて
最初からやりなおしたいことはよくある話しだし。
たぶんね、IDEとか使ってない人が
テキストエディタで書く→保存→エディタ終了→実行→やり直したくなった→最初に戻る
なんてやってめんどくさいと感じてるだけだと思う。
素直にIDE使えと。
0949デフォルトの名無しさん
2011/07/09(土) 17:27:03.69メリットは簡単に分かりそうな物なのに...
0950デフォルトの名無しさん
2011/07/09(土) 17:30:14.430951デフォルトの名無しさん
2011/07/09(土) 17:31:09.440952デフォルトの名無しさん
2011/07/09(土) 17:34:21.00> テキストエディタで書く→保存→エディタ終了→実行→やり直したくなった→最初に戻る
viっていうシーラカンスみたいなエディタでも
ソースコード開いたままmakeして実行できるよ
あなたがIDEでやってるように
0953デフォルトの名無しさん
2011/07/09(土) 17:34:42.66普通に複数行のプログラムも評価できる物なのに
0954デフォルトの名無しさん
2011/07/09(土) 17:38:03.89>途中で間違えて
>最初からやりなおしたい
line editor っちゅー便利な物がありましてね
0955大天使 ◆uL5esZLBSE
2011/07/09(土) 17:49:31.36自分でテスト用のコードかけるテンプレ用意しておけばいいだけで
そっか、バカ君には必要なのかもしれないな
0956デフォルトの名無しさん
2011/07/09(土) 17:52:23.84>テキストエディタで書く→保存→エディタ終了→実行→やり直したくなった→最初に戻る
エディタはサスペンドするか、もう一個、端末を立ち上げて実行するだろ
>>949
emacsからgdb立ち上げたことないようなレベルのが、
gedit使って、うはっ、便利とかいってる頭が幸せなヤツじゃないの
drschemeで遊ばすぐらい、会社の新人研修にいれとけ
0957デフォルトの名無しさん
2011/07/09(土) 18:06:06.54今どきの端末はタブも使えるし、GUIのエディタ使う人はそもそも画面が別だしな
てか同画面でエディタ>実行>別コマンド...>エディタ>実行…ってやってたら履歴手繰るのが面倒だw
0958デフォルトの名無しさん
2011/07/09(土) 18:15:41.87> REPLを前提とした言語を使った事が無くても、gdbとかを使った事があれば
gdbよりもIDEの方が便利って話だよ。
0959デフォルトの名無しさん
2011/07/09(土) 18:20:46.100960デフォルトの名無しさん
2011/07/09(土) 18:21:06.26> emacsからgdb立ち上げたことないようなレベルのが、
それくらいはできるよw
要するにデバッガ使うってことでしょ?
ブレークポイントとか止めたい行をクリックして
実行して止めたりステップ実行したり
マウスカーソルを変数の上に持ってきて
ポップアップで変数の中身を見たりするのと
”同等レベル”
のことでしょ?
0961デフォルトの名無しさん
2011/07/09(土) 18:21:46.720962デフォルトの名無しさん
2011/07/09(土) 18:22:04.720963デフォルトの名無しさん
2011/07/09(土) 18:23:53.02> IDEがあってもREPLは便利だよ
機能的にかぶってるから、
便利だとしたらそれはIDEにREPLとしての
機能が足りない場合の話でしょ?
0964デフォルトの名無しさん
2011/07/09(土) 18:28:30.080965デフォルトの名無しさん
2011/07/09(土) 18:31:59.84/ │ ̄\__ ゴゴゴ・・・
/
.. 、 ,_
 ̄\_/ ̄ ̄\/ ̄ ゴゴゴゴゴゴ・・・
___/ ̄へ√⌒l⌒´ ̄ ̄\_
´ / \
_ ./ ̄ ̄ ̄\ /
__ `ソ/ ─ ─ \/ ̄/
\/゚ (●)。 (●) \/ rへ,ノ うごごご
__>-へ| i (__人__) |ノ :.\_
.:/从へ、.゚` ⌒´o.ノ从rーヘ_
_::ノ :ノ`⌒Y⌒´:: \
.::┘ :│ ゚
0966デフォルトの名無しさん
2011/07/09(土) 19:44:12.25scalaのREPLは率直に言ってイラッとくるけど、ClojureのREPLは普通に使えるよ
速さが全然違う。Clojureはその場でコンパイルされる動的言語だけど、Scalaは
インタープリタだという違いもある。leiningen+Clojureなら補完は期待できない
けどCake+Clojureは補完は強力になる。apropos,doc,sourceを使えば、シェルで
使ってる感覚い近くなるしね。言語によってはREPLでtrace/debug/profileも使
えるからね。
IDEは静的言語向けだと思うよ。あれで動的言語を扱ってると動的言語の魅力は
かなり無くなる。
0967デフォルトの名無しさん
2011/07/09(土) 19:52:18.66RのREPLもそこそこ強力かな。REPLの良し悪しは開発効率にかなり影響するからね。
0968デフォルトの名無しさん
2011/07/09(土) 20:02:53.04REPL > IDE って言われて発狂してるでござる
0969デフォルトの名無しさん
2011/07/09(土) 20:03:16.130970デフォルトの名無しさん
2011/07/09(土) 20:05:19.93静的言語がIDE立ち上げるのにかかる時間内で
作れるプログラムだけ
0971デフォルトの名無しさん
2011/07/09(土) 20:08:28.15IDEとか言ってるのドカタだけだろ
0972デフォルトの名無しさん
2011/07/09(土) 20:12:28.38> Clojureはその場でコンパイルされる動的言語だけど、Scalaは
> インタープリタだという違いもある。
逆じゃないかと思ったけど、そうでもない?
ちょっと調べてみる
0973デフォルトの名無しさん
2011/07/09(土) 20:13:14.90たぶん動的言語も、エディタも、REPLも使ったこと無いだろこいつ
0974デフォルトの名無しさん
2011/07/09(土) 20:14:15.33例えばどっかのブログ見てちょっとしたコード片が載ってたりしてちょっと試してみたいなと思ってREPL起動するのと
IDE起動して新しいプロジェクト作って〜とかやったりしてさらに結果見るのに
ブレークポイント設置したりprintf付け加えたり〜するのじゃ手軽さが違う
0975デフォルトの名無しさん
2011/07/09(土) 20:15:08.02アホはおまえじゃないのか?
0976デフォルトの名無しさん
2011/07/09(土) 20:17:39.090977デフォルトの名無しさん
2011/07/09(土) 20:18:02.36少し書いてはREPLで動かしてテストする
こっちは型だけでなくロジックのエラーも捕捉可能だ
テスト駆動に役割が吸収される面もあるけど
0978デフォルトの名無しさん
2011/07/09(土) 20:19:02.780979デフォルトの名無しさん
2011/07/09(土) 20:20:42.260980デフォルトの名無しさん
2011/07/09(土) 20:21:31.15publicメソッドのインターフェース変更だけ
0981デフォルトの名無しさん
2011/07/09(土) 20:26:53.78実行中のサーバに繋いでREPLプロンプト出して実行時コード差し替えとか
ちょっと面白そうな話題だったのに
今日来てみたらまたIDEの話になってたw
0982デフォルトの名無しさん
2011/07/09(土) 20:28:30.260983デフォルトの名無しさん
2011/07/09(土) 20:28:58.95scalaはscalac(コンパイラ)とscala(REPL)があるけど、この話では後者のことね。
ごっちゃになりやすいから
0984デフォルトの名無しさん
2011/07/09(土) 20:34:54.23ああそういうことか。お手数かけました
0985大天使 ◆uL5esZLBSE
2011/07/09(土) 23:01:39.70だから、それがアホでしょ
重いIDE使ってるのもアホっぽいし
それに、プログラミング集中期間とか俺PCつけてたらIDE(エディタ)はほぼ常時起動されてるけど
0986デフォルトの名無しさん
2011/07/09(土) 23:03:14.540987デフォルトの名無しさん
2011/07/09(土) 23:07:00.250988デフォルトの名無しさん
2011/07/09(土) 23:23:26.45> IDEでできる「静的言語のみに可能な自動リファクタリング」って
> publicメソッドのインターフェース変更だけ
動的言語でまともに自動リファクタリングできるツール教えてよ。
Perlでお願いね。
0989デフォルトの名無しさん
2011/07/09(土) 23:24:30.45ただ起動してるだけだろw
emacsが重いから常時起動しているのと同じだ
0990デフォルトの名無しさん
2011/07/09(土) 23:24:57.28のでは?
0991デフォルトの名無しさん
2011/07/09(土) 23:35:17.76スパゲティ屋さんが多いから重宝されてるんじゃ?
<リファクタリング
0992デフォルトの名無しさん
2011/07/09(土) 23:35:41.40開発環境は IDE の元祖的な存在だし、Workspace / Transcript で REPL の様な
対話的プログラミングも出来るし、Reflection 機能も充実しているし
0993デフォルトの名無しさん
2011/07/09(土) 23:48:57.820994デフォルトの名無しさん
2011/07/10(日) 00:05:57.95動的言語の開発環境にも
常に裏で実行しつづけて型情報等を解析するシステム
DOKATA (Dynamic Object's Keyword And Type Analyzer)
が必要ってことですね。わかります
0995大天使 ◆uL5esZLBSE
2011/07/10(日) 01:28:30.950996デフォルトの名無しさん
2011/07/10(日) 02:14:53.91> 常に裏で実行しつづけて型情報等を解析するシステム
それ作るのが不可能だから。
動的言語の欠点だよ。
実際に動かさないと型情報が判明しない。
0997デフォルトの名無しさん
2011/07/10(日) 02:16:26.190998デフォルトの名無しさん
2011/07/10(日) 02:18:10.31動的言語にはない便利な機能を、
土方機能なんていうの?
おまえのかーちゃんでべそ。レベルの
悪口にしか聞こえないんだけどw
0999デフォルトの名無しさん
2011/07/10(日) 02:22:18.67ちゃんと書けば、静的言語でも
実行時に変数に入っているオブジェクトの
メソッドを呼ぶようなことはできる。
だけど、少し手間がかかるからやらない。
(その手間があることでIDEの開発サポートとと速度と堅牢性が得られるのに)
めんどくさがりやだから動的言語厨はテストも書かない。
1000デフォルトの名無しさん
2011/07/10(日) 02:22:43.2910011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。