スクリプト言語と開発効率について
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/04/26(木) 01:16:27ID:Z/Rpkmivスクリプト言語は基本的に、変数の型を指定できないものが多いわけです。
で、これは本来、これら開発効率を売りにした言語の特徴だったはず。
でもちょっと待って下さい。
この仕様が間違いなく開発効率を下げている。
意図しない挙動をフォローするための機能実装がとても非効率的です。
皆さん、特にC系統の言語に精通されている方にお聞きします。
スクリプト言語での開発効率に関して、
普段意識的に実装されているロジックとかありますでしょうか。
0002nobodyさん
2007/04/26(木) 03:05:38ID:vplBaXEV0004nobodyさん
2007/04/26(木) 10:29:28ID:???メソッドの引数のタイプをいちいちチェックして、他の誰かが使ったり、
また再利用したりするときに備えるなんてことはそれほど重要じゃないことに気がついた。
メソッドどうしが互いにバンバン依存しあってても気にしない。
間違った呼び出しかたでメソッドを呼んでるコードがあったら、
メソッドの方を書き換える勢いで行けばいいよ、動けば良いのだから。
これはPHPが悪いって訳じゃなく、動的型付けのスクリプト言語はそういう性格のものだってだけのこと。
Railsだって一見きれいだけど、なかみはガチガチの密結合だしね。
0005nobodyさん
2007/04/26(木) 18:48:41ID:???普通一回限りの書き捨てよりも
ウェブアプリの方が多くないか?
> れはPHPが悪いって訳じゃなく、動的型付けのスクリプト言語はそういう性格のものだってだけのこと。
いや、悪いのはPHPでも、動的型付けのスクリプト言語でもなく、
そういうコードを書くプログラマ。
0006nobodyさん
2007/04/26(木) 19:37:20ID:???ちょっとDB繋いで情報表示するだけの告知ページやら、メールフォーム系で微妙に違うものいくつも作るときとかではphpで書き捨てる
がつがつ使い回す状態想定する時にphp採用したいかっていうと・・それもケース次第だな
うちだとあんま規模大きいのだと、phpは選定対象から外れがちだなー
だからって人材配置考えると、JAVAがいいとかRubyで行くぜとか一概に言えるもんでもないし
あー、なによ一言で言うと結局「場合次第」かよ
ゴミカキコ氏ねよ俺
0007nobodyさん
2007/04/26(木) 20:19:05ID:???PHPでウェブアプリを作るとき、フレームワーク以外の自作ビジネスロジックを使い回す事ある?
汎用掲示板機能クラスとかみたいな感じで
0008nobodyさん
2007/04/26(木) 23:47:30ID:???0009nobodyさん
2007/04/27(金) 07:09:45ID:???0010nobodyさん
2007/04/27(金) 07:52:00ID:???PHPでもRubyでも自動テストはちゃんと書く事にしてる。
自動テストが通る == -Wallで警告無しでビルド出来る
という認識。
あと、ヘッダファイルだけみりゃ何やっててどう呼ぶかが大体わかるということもないので
関数の中身を読まなきゃやってることを理解出来ないことが比較的多い。
これには面倒でもコメントをちゃんとつけるくらいの対応しかないね。
0011nobodyさん
2007/04/27(金) 11:01:38ID:???できたほうが絶対によいとはわかっていながらずるずる勉強先延ばしだ
0012nobodyさん
2007/04/27(金) 12:23:17ID:???精一杯がんばってphpとかのスクリプト言語がすべてって香具師では、スクリプトの品質が異なっていて当然。
プロジェクトで悩ましいのは、そういう混在したスキルの香具師のモチベーションを維持させ続けるレベルを設定できるか。
理想論だと実力のある香具師はモチベーション高まるけど、下の方は落ちこぼれる。
妥協論だと、下の方は付いて来れるけど、実力のある香具師はモチベーション維持できずに逃げ出す。
0013nobodyさん
2007/04/27(金) 22:09:46ID:???0014nobodyさん
2007/05/05(土) 01:30:39ID:YkQ5N4PI> 意図しない挙動をフォローするための機能実装
が大変という時点で、少なくともWEBアプリ系のシステム規模では言語関係なく腐ってます。
データの入り口をきっちり処理することを前提にするなら、後は内部コードが腐ってるだけの
ことじゃないですか。PHPならassertもあるし、それ以上の何が必要か正直わからない。
0015nobodyさん
2007/05/05(土) 05:02:19ID:???分ってれば十分なので、さっさと他の言語に移る事をおすすめする
0016nobodyさん
2007/05/05(土) 05:08:53ID:???0017nobodyさん
2007/05/05(土) 05:22:30ID:???ことになるのが恐くなるな
http://www.phpunit.de/pocket_guide/2.3/ja/index.html
0020nobodyさん
2007/05/05(土) 18:23:12ID:???0021nobodyさん
2007/05/11(金) 14:57:43ID:???すぐ下にあるように、変数がなんなのか知るためにいちいちprint_rが
必要な分、手間がかかるってことじゃないかな。
ほら、動きがおかしいプログラムの怪しい変数をprint_r()して、
バグの原因がわかるっていうことよくあるじゃん?
例えばCには類似の問題がトリッキーな書き方をしないかぎり無いでしょ?
全部の変数に型が決まってるわけだから。
0022nobodyさん
2007/05/12(土) 14:56:57ID:???> バグの原因がわかるっていうことよくあるじゃん?
Cでも怪しい変数をprintfしてバグの原因がわかることよくありますが?
0023nobodyさん
2007/05/12(土) 18:48:24ID:???正しいが、デバッグの時間を考慮すると一概に効率がいいとはいえないな。
デバッグの事を考えるならMVCを分けて、テストを書いて、重複のあるコードを避けて
となるが、そういうプログラミングを行うならHTMLの中にプログラムが書けるPHPの
魅力半減だし、始めから簡素なPerlやRubyでフレームワーク使ったほうが良いんじゃ
ないかと思えてくる
0024nobodyさん
2007/05/12(土) 21:34:51ID:???0025nobodyさん
2007/05/12(土) 23:02:17ID:???適さない言語という事でFA?
0026nobodyさん
2007/05/13(日) 07:18:20ID:???規模と書き方に大きく依存すると思う。それは多分JavaでもRubyでも一緒。
Perlですら、十分に高品質なプログラムはあると思うが。
もっと言うならOSを落とす危険が常にあるようなC・C++みたいな言語は
最悪の「品質」のプログラムも「容易に」書けると思う。
0027nobodyさん
2007/05/13(日) 08:49:43ID:???>>26
> OSを落とす危険が常にある
それは、OSもしくはその設定に問題があるんじゃ...
0028nobodyさん
2007/05/13(日) 10:24:36ID:???つまりオブジェクト指向を活用して、コードのあちこちに
ルーチンやデータが分散しないようにオブジェクトに
閉じ込めておく。そういう書き方をするとJAVAと同じような
冗長な書き方をしないといけないし、そこまでやるなら
JAVAと同じようにデータ型のチェックをコンパイル時に
してくれてもいいと思うのだが
0029nobodyさん
2007/05/13(日) 10:32:23ID:???かなり需要があると思うが、劣化Perlのような仕様をいつまでも引きずってる
せいで中途半端な言語に成り下がった。
0030nobodyさん
2007/05/13(日) 10:40:27ID:???そう思うなら Java 使ってれば?
>>29
> PHPがレンタルサーバーなどでも簡単に運用できるJAVA目指すなら
誰もそんなもん目指してませんが。
0031nobodyさん
2007/05/13(日) 11:22:09ID:???このスレの結論でてしまいましたか
0032nobodyさん
2007/05/13(日) 14:32:51ID:???PHPは変数の宣言が出来ず、スコープが関数単位。
だから、コードが汚くなって、ケアレスミスが増える。
いまどきPerlをuse strictなしで書く人はいないが、PHPはno strictで書くしかない。
その分、誰でもすぐになんとなく書けてしまえるけどな。
0033nobodyさん
2007/05/13(日) 17:16:25ID:???でも業務システムとか大規模サイトとか堅牢さと処理能力を求められるのは、コンパイル言語じゃないと厳しい。
銀行の口座サイトが、ミクシのようにperlで設定ミスでスクリプト漏れたら痛いし。
0035nobodyさん
2007/05/13(日) 18:32:16ID:???Javaはコンパイルが必要だからエンタープライジーなんじゃなくって、型チェックが出来るからエンタープライジーなんだよ。
PHPの場合、型の宣言どころか変数の宣言自体出来ないから話にならない。
$status_flg = false;
...
$status_flag = true;
...
if ($status_flg) {
...
}
↑最後のifが通らなくて、その理由がわからない。それがPHPクオリティ。
0037nobodyさん
2007/05/13(日) 21:52:13ID:???いや、>>35は知ってるが、それを使わないのがPHPクオリティと言いたいのか。
それなら同意。
>>36 は俺にはよく分からないので詳しく。
・・・というか PHP の E_STRICT は多分ONではやってられない。
あまりに「非推奨」とか「廃止予定」とかが多すぎてPEARのライブラリすら使えない。
それもPHPクオリティ。
0038nobodyさん
2007/05/13(日) 22:00:47ID:???いや>>35はE_NOTICE がONでも通るだろ。よく読め。(PHPクオリティ?)
だからといって全ての変数に型宣言が必要とか言うのは掲示板スクリプト等程度
においては正直効率的とも可読性が高いとも思えない。
(明示的なキャストしまくりとか勘弁して)
やっぱり規模(と開発体制・人手の分散度合い)によるケースバイケース
でいいんじゃないか? ←ここでループ
0039nobodyさん
2007/05/13(日) 22:43:36ID:???実装のデータ型はカプセル化されるので問題ないと思うが、
しかしPHPのオブジェクト指向は書きづらいし、使いづらいよね。
0040nobodyさん
2007/05/13(日) 22:45:00ID:???0041nobodyさん
2007/05/13(日) 23:18:39ID:???とかやって、もしクラスがgetStatusインタフェースを持って無かったとしても
使用してみないとエラーが出ないという恐さはあるか。
0042nobodyさん
2007/05/13(日) 23:59:22ID:???言いたいことはわかるし、間違ってるとは言わないけど、その手のタイプミス
にかかわるバグが処理系で摘出できないケースは頻度は少ないが Java にだっ
てある。
もちろん頻度が少ないと言うのは重要で、だから大規模なソフトウェアに PHP
より Java が適していると言いたいんだろうけど、ごちゃごちゃ書かなくても
>>24 で充分だろ?
0043nobodyさん
2007/05/14(月) 05:18:28ID:???>>35 のようなミスが起きた記憶はほぼないな。
今となっては、変数宣言はあってもよかったなと思うけど。
設定で、変数宣言の必要なモードをつけてもいいと思う。
0045nobodyさん
2007/05/14(月) 09:48:04ID:???で、デバッグに勘が必要になる。
自分だけが書いたのコードなら自分の思考パターンは大体わかるからいいけどさ。
まぁそのへんの融通が効くから書き飛ばすのには向いているとも言える。
上にあるように、間違った呼びかたをしてたら呼び出された先をさっさと直しちまえば良い。
アプリ全体の構造が頭の中で把握できる範囲ならこれで大抵はうまくいく。
0046nobodyさん
2007/05/14(月) 12:09:34ID:???PHPを使うケースって10行未満のスクリプト限定になっちゃうけど。
0047nobodyさん
2007/05/14(月) 12:13:13ID:???use strict;
sub foo {
my $arg = shift;
print "$arg\n";
}
sub bar {
print "$arg\n";
}
foo('hello');
は、実行しようとするとコンパイルエラーが起きちゃう。bar関数で不正に$arg使ってるから。
0048nobodyさん
2007/05/14(月) 12:15:25ID:???<?
error_reporting(E_ALL);
function foo($arg) {
print "$arg\n";
}
function bar() {
print "$arg";
}
foo("hello");
実行すると、出ました、「hello」。残念ながらerror_reporting()はbar()を見てません。アッザース。
■ このスレッドは過去ログ倉庫に格納されています