スクリプト言語と開発効率について
最近PHPをはじめました。
スクリプト言語は基本的に、変数の型を指定できないものが多いわけです。
で、これは本来、これら開発効率を売りにした言語の特徴だったはず。
でもちょっと待って下さい。
この仕様が間違いなく開発効率を下げている。
意図しない挙動をフォローするための機能実装がとても非効率的です。
皆さん、特にC系統の言語に精通されている方にお聞きします。
スクリプト言語での開発効率に関して、
普段意識的に実装されているロジックとかありますでしょうか。 何、頓珍漢なこと言ってるんだか。
Javaはコンパイルが必要だからエンタープライジーなんじゃなくって、型チェックが出来るからエンタープライジーなんだよ。
PHPの場合、型の宣言どころか変数の宣言自体出来ないから話にならない。
$status_flg = false;
...
$status_flag = true;
...
if ($status_flg) {
...
}
↑最後のifが通らなくて、その理由がわからない。それがPHPクオリティ。 >>34はE_STRICTとuse strictが別物だと言う事を知らないんだろうな…。 >>35 は多分 error_reporting(E_ALL) を知らない。
いや、>>35は知ってるが、それを使わないのがPHPクオリティと言いたいのか。
それなら同意。
>>36 は俺にはよく分からないので詳しく。
・・・というか PHP の E_STRICT は多分ONではやってられない。
あまりに「非推奨」とか「廃止予定」とかが多すぎてPEARのライブラリすら使えない。
それもPHPクオリティ。 >>37
いや>>35はE_NOTICE がONでも通るだろ。よく読め。(PHPクオリティ?)
だからといって全ての変数に型宣言が必要とか言うのは掲示板スクリプト等程度
においては正直効率的とも可読性が高いとも思えない。
(明示的なキャストしまくりとか勘弁して)
やっぱり規模(と開発体制・人手の分散度合い)によるケースバイケース
でいいんじゃないか? ←ここでループ 型宣言というか、if ($obj->validData)みたいにオブジェクト指向を使えば、
実装のデータ型はカプセル化されるので問題ないと思うが、
しかしPHPのオブジェクト指向は書きづらいし、使いづらいよね。 if ($obj->validData())だった if ($runtime->getStatus())
とかやって、もしクラスがgetStatusインタフェースを持って無かったとしても
使用してみないとエラーが出ないという恐さはあるか。 >>35
言いたいことはわかるし、間違ってるとは言わないけど、その手のタイプミス
にかかわるバグが処理系で摘出できないケースは頻度は少ないが Java にだっ
てある。
もちろん頻度が少ないと言うのは重要で、だから大規模なソフトウェアに PHP
より Java が適していると言いたいんだろうけど、ごちゃごちゃ書かなくても
>>24 で充分だろ? 変数は補完入力かコピペ入力をするから、
>>35 のようなミスが起きた記憶はほぼないな。
今となっては、変数宣言はあってもよかったなと思うけど。
設定で、変数宣言の必要なモードをつけてもいいと思う。 PHPの問題は、間違った引数の型でもメソッドを呼べるということだよなぁ。
で、デバッグに勘が必要になる。
自分だけが書いたのコードなら自分の思考パターンは大体わかるからいいけどさ。
まぁそのへんの融通が効くから書き飛ばすのには向いているとも言える。
上にあるように、間違った呼びかたをしてたら呼び出された先をさっさと直しちまえば良い。
アプリ全体の構造が頭の中で把握できる範囲ならこれで大抵はうまくいく。
ケースバイケースって言っても、Perlでuse strictしないで書くなんて、それこそ10行未満の使い捨てのスクリプトだけだよ。
PHPを使うケースって10行未満のスクリプト限定になっちゃうけど。 例えば、
use strict;
sub foo {
my $arg = shift;
print "$arg\n";
}
sub bar {
print "$arg\n";
}
foo('hello');
は、実行しようとするとコンパイルエラーが起きちゃう。bar関数で不正に$arg使ってるから。 で、PHPはどうかというと、
<?
error_reporting(E_ALL);
function foo($arg) {
print "$arg\n";
}
function bar() {
print "$arg";
}
foo("hello");
実行すると、出ました、「hello」。残念ながらerror_reporting()はbar()を見てません。アッザース。
>>48
それ、PHPじゃなくてもPythonやRubyでもおんなじことだよ。
コード読み込んだ時点ではエラーが出ず、その箇所が実行されてはじめてエラーが分かる。
でもunit testを書いていれば、error_reporting(E_ALL) のレベルで十分、特に困らない。
PHPもRubyもPythonもみんなそれで問題なく開発できてる。
もしuse strictサイコー、他のスクリプト言語ダメダメというなら48の勝手だけど、use strictしたところでJavaやC#からみれば
> アッザース
だな。目くそ、鼻くそを笑うとはまさにこのこと。 >>49
だな。>>47のも
use strict;
my $arg;
(以下略)
で通るし。だからケースバ(ry >>46
> PHPを使うケースって10行未満のスクリプト限定になっちゃうけど。
君は、それでいいんじゃね。
俺はももう少したくさん書けるけどね。 PHPの最大の問題はブロックによるスコープの切り替えがないことなんだよな。
無名関数がないから他の言語だったらインラインでも書けることを、どうしても一時変数を使わないといけない。
で、その変数は関数全体で有効になるから、大事な変数と使い捨ての変数がごっちゃになってしまう。
↑と変数の宣言が出来ないこととあいまって、熟練者が書いてもあまり綺麗にならないし、初学者が書くと恐ろしく汚いコードになる。
PHPは要するにインスタントラーメンなんだよな。
システム開発産業としてみた場合のPHPのメリットは大きい。
メリットがあるからこそこれだけ流行してる。証明されてる。
確かにお湯かけるだけで作れて、少なくとも不味くて食えないってことはない。
しかし、インスタントラーメンばっかり作ってて、料理人とはいえないよね。
>>53
ってぇとPHP用フレームワークは有名店コラボのカップ麺?
実際の日常生活でも料理人が求められることってないだろ
普通は自炊なり家庭料理なりだ
インスタントラーメンで用が済むのに料理人が出張ってきたら困る
しかも料金高いし インスタントラーメンだけ作ってても、客が来て儲かってれば
料理人だろ。
○○の言語じゃなきゃ駄目とか言ってる方が素人ぽくみえるぞ。 そうだな、言語が開発効率と無関係なら
アセンブラでウェブアプリ造れるよな 結論:Javaでメジャーなフレームワーク使うのが一番。 徹底してルーチンやクラスを分けて
変数のスコープを数十行程度にする
そういう当たり前の事が簡単にできる
スクリプト言語がいいね。RubyとかPythonとか。 ここまでの流れに加えるなら、Web用途ならやはり文字列の扱い重要。
スクリプト言語の有利な点は、全て文字列の扱いと配列(およびリスト)や
連想配列のデフォルト実装だと思う今日この頃。
正直、perlやPHP、rubyから入った人間はCやJavaの文字列、配列の
扱いは気が狂うほどのパラダイムシフトじゃないか?マイナス方向への。
int i;
for(i=0; i<ar.length(); i++){
ar[i] にほげほげ
}
は正直foreachやeachに慣れた人間には耐えられないんじゃないかな。 ふつうのCやJavaだと
> ar.length()
は
ar.size()
なのかなと思う今日この頃。不勉強すんません。 Perlって実はかなり厳格なプログラミングを要求されるんだよね。スクリプト言語の中では。
Perl6ではよりその傾向が強まる。 以前のPerlがテキトー万歳だったんだよ
それだからこそ受け入れられてきたんだがそれゆえ5で崩壊した
use strictとかがある時点で変態 >>61
俺はまさにPHPでプログラム始めた人間だが、最近Cを使ってその辺は耐えられなかったことはないが、
「だからPHPとかPerlができたのか」とスゴく納得した。 Javaは冗長だけど注意深く使用すれば誰が読んでも内容が理解しやすい
コードを書きやすいので、一概に悪いとは思わないな。 そんなこと言ったらたいていの言語は読みやすいように書くことはできるよ
無限の時間とリソースが使えればな
それを極力圧縮するできるがどうかが「便利」の要だろ Rubyも読みやすい書きやすいっていうけど、リフレクションを多用すると
恐ろしいことになるからなぁ。
リフレクションみたいに、静的な型なんてクソクラエみたいな書き方は、
なかなか強力で、使いどころを間違えなければたしかに書くときの効率はかなり上がるけど、
一方乱発するとメンテの効率をいちじるしく落とすね。
>>69 型付けが弱い云々というよりは文化じゃないのかなと。
PHPならそれ3日でできますよ。フレームワークなんていりませんよ。て
べたべたべたべた書いて動いちゃう、それでいいやって仕事が多く、そんな
ソースを槍玉にあげてもなぁ、という気もする。そりゃ手を加えるほどに
バグも入るさ。安さ速さ最優先なんだから。
PHPの問題は言語仕様そのものというよりその使われ方だろう。
またそういう書き方でやってきた人間が、ある程度以上でかいもしくは
業務処理系のものまで上記の延長でPHPで作ろうとするから、言語の(糞)
仕様まで問題になるんだと思う。
perl, ruby, python なんかはまだツールとしての用途があるから違う文化が
あるのかもしれないが、PHPはもうwebしかないから、もともとやばい言語仕様
なのにそのままでフレームワークとかオブジェクト指向の整備とか大型化の
方向でどんどん泥沼にはまってるような気がする。 なんのためにプログラムがあるのか勘違いしてないか?おまえら プログラミング言語はプログラム作成のために存在しておりますよ
思想体現の手段ではありませぬ 人間の思考つまり、思想に近いプログラム、
読みやすく書きやすいプログラムとも言えるな。 結果がよければあとは何でもいいじゃん。
自分の得意なもので結果だせればそれでいいでしょ。
批判ばっかりしてて神経質じゃねえのかプログラマーって 君の世界に客というものはいないのか
あるいは他の開発者でもいい
未来にそのプログラムを改修する自分でもいい
誰か他者は介在してないのか >>69
php で色々組んでるけど、型関係でバグったことは使い初めの頃の
勘違いしかない。
処理系に型の間違いのチェックアウト能力がないのは確かだけど、
そもそもそんな間違いをぼろぼろやるプログラマは他のところでも
バグってる可能性が高い。 >>78
>バグってる可能性が高い。
まぁ、そうだな。69みたいな知ったかな書き方する奴はたいていどの言語でもバグ出す。 そのさー、バグを出す/出さないをプログラマの能力依存にしないための方策の一つが、
強い型付けなんだが…。 コンパイラーが型チェックしてくれるので、単純なバグはそれだけでつぶせる。単純なミスをまったくしないプログラマーには不要な機能かもしれないが。
バグをださないように慎重に行うプログラミング、
バグが出てからバグを潰していくプログラミング、
どっちが効率がいいかってどこかで見たな >>81, >>84
いや、型のチェックアウトができることによるバグ検出能力にケチつける気はないけど、
強い型付けによる不便さもあるわけだから、トレードオフでしょ? >>85
それきいてFreeBSDとWindowが頭にうかんできた コンパイラによる型チェックが不便とか言ってるのは素人だけだろ?
後はMCでない、ぬるい仕事しかした事のない歳だけ食った自称ベテラン。 >>88
ゆとりまっしぐらな俺でも「変数の宣言いらないよ!」「型が柔軟だよ!」な謳い文句に気持ち悪さしか感じない
使い捨ての変数をバカみたいに量産する糞スクリプトしか書けないのか?って思う >>88-89
また、適材適所を知らないアフォが沸いてきたよ。(w >>91
いや、それが全てだろ。だから何回で(ry
まあそれぞれの適所を(実際に使わずに)理解するためには、こういうスレは
いいと思うがな。 適す範囲が著しく狭い物や、どこにも適さない物もあるでしょう
ホント思考が極端だな そりゃあるだろうけど、このスレと何の関係があるんだ?
具体的に指摘できないなら、自分の日記帳にでも書いたほうがいいよ。 >>94
> どこにも適さない物もあるでしょう
つまり存在意義のかけらもない言語?これは言い切る自信はないなぁ。
(強いて言うならMSのJ#みたいな?) 動的な型と静的な型の長所短所はあるけど、(もっともRubyの松本なんかは動的な型で決まりって言ってるけど)、
動的な型付けでかつ変数の宣言ミスをコンパイラーがチェックしてくれるPerlはかなり理想的だな。
PHPの場合、型が動的なのに加えて、ブロックによるスコープのコントロールが利かないこと、
変数が1種類しかないこと(Perlでいうところの@arrや%hashがなく、$arr/$hash)、
名前空間がないこと(まあ、パッケージ変数の代わりにクラス変数を使うんだけど、パッケージがないので今度はクラスの管理が難しくなる)
これらが組み合わさって、汚いコードを書くことを強制されるというか。ゆえにバグを誘発する。 >>95
具体的に指摘できていないのは適材適所適材適所言ってる奴も同じだろ >>97は>>48と同一人物
Perlのオナニーは自分のブログでやれ
じゃないと>>48とおなじようにやり返されて恥かくだけ PHPの有利なとこは、mod_phpが簡単にインストールできてそこそこ速いこと。
すぐに覚えられるので、人員の確保がしやすいこと。
これ以外の、言語仕様で優れてるところがあるなら教えて欲しいんだけど。
ちなみにRubyの松本はいろんな記事で型チェックの有用性は認めている。動的な型つけと型チェックは別問題だからね。
型は指定しなくてもいいが、指定すればチェックが働くようなのがいいんじゃない。
ActionScriptがそんな感じで、うまくやってるような気がするが。 >>98
例えば >>61 のようにいくつか書かれてた思うけど、理解できてないと言うことですか?
>>101-101
そうだね。
・変数の型が 静的 / 動的
・型のチェックが コンパイル (もしくは実行開始) 時 / 実行時
・変数宣言の 要 / 不要
・変数のチェックが コンパイル時 / 実行時
は別物。(もちろん、動的な型を持つ言語はコンパイル時に完全に型チェックができない
と言うような制限はある。)
VB なんかは、指定しないと型なし (Variant) になるし、指定すればそれなりにコンパ
イル時チェックができるので、結構うまくできてたと思う。 動的型付け言語のプログラムを読んでて肩が凝るのは、
関数の動きを理解するのにコンテクストの理解を要求するんだよなぁ。
出入口がしっかり定義されていないから、関数が独立せず外部の知識前提で書かれてることが多い。
で、言語やフレームワークごとの流儀とか、書いた人間のクセなどを読む勘みたいなものが
必要になってくる。
これは難しいものではまったく無いけど、C育ちなどではリハビリがいることもある。
Rubyで自前型チェックを"精神安定のために"って言いつつ全公開メソッドに追加してる奴を見たことがあるよ。
> 出入口がしっかり定義されていないから
動的型付けと何の関係もないと思うが...。 ああそういうことか。
でも、だからと言って
> 関数が独立せず外部の知識前提で書かれてることが多い。
と言うのは、単なる偏見かと。 スプリプト言語自体も、スクリプト言語で大規模サイト作ってる香具師も馬鹿だとよくわかるスレ。
パールでサイトつくちゃったミクシとかゴミだよな。
本当に正しい動きするかより、エラー出ずに動けばおkレベルだろ? まあスクリプト言語じゃ大規模サイトは無理なのは事実。 >>111
Amazonやlivedoorは大規模とはいわんのかな。
校正するなら、
誤)まあスクリプト言語じゃ大規模サイトは無理なのは事実。
正)まあスクリプト言語「だけ」じゃ大規模サイトは無理なのは事実。
くらいか。だから適材適所と何回言えば(ry >Amazonやlivedoorは大規模とはいわんのかな。
DocomoのCiRCUS位でないと大規模とは言わないな…。 ユニットテストだけでバグが無くなると思ったら大間違い。
とコードコンプリートに書いてあったのの受け売り。 糞PGが一人でもまぎれこんでいればバグがある。
早く国家資格持ってない香具師はプログラム組めないようにしてしまえと思う。
トラフグ調理免許とかジャンボジェット運転許可証とかみたいに。 >>114
ものすごい亀だが、それってインフラじゃないのか? スクリプト言語に文句いってるレベルのやつはスクリプト言語でできないプロジェクトにはめぐりあえないだろうな、レベル低すぎて。 そらそうだ。単なる利用者だし。
低レベル層の開発関わってる人も上澄み扱うプロジェクトには関わりにくい訳で。 >>120
同感
動的型付けの「お気楽さ」が心地よいよ〜 すいません。。質問させてください。
webアプリ作成において、スクリプト言語が使われる理由って何ですか?
詳しく教えてください。。機械誤変換がなく、比較的簡単に作成出来るって
ことまでしかしらないので。。よろしくお願いします。 ・Web だと、通常あまり厳しい性能を求められない
・文字列処理が多い
・仕様変更が多い
ぐらいかな。 nobodyさん>
Web だと、通常あまり厳しい性能を求められない っていうのは、たいしたアプリは
作れないってことですか??大規模な、システムはやはりJavaですか。
・文字列処理が多い
・仕様変更が多い
っていうのはつまり??初心者ですいません。。 ソフトウェア開発には、しばしば交わっているがたいていは分かれている、
5つの世界がある。
その5つとは:
1.パッケージ
2.インターナル
3.組み込み
4.ゲーム
5.使い捨て
スクリプト言語の得意分野は、5. しょっちゅうバグまみれでシステム落ちても文句言えない用途でしか使えないしなあ。
セキュリティ上もスクリプト言語は改変し易いので不利。 すげぇな。まだ動的言語にあれこれ文句言ってる奴居るのかwww
_
r-、' ´ `ヽr-、
ィ7 /l: ハヽハ トヾ 駄スレを隠すことは、この俺が許さん!
'|l |'´_` ´_ `| || 信念に基づいて行動する。
| |´ヒ} ヒ}`! l| それを人は正義と言う。
__ノ゙). 从 l, _'_. |从 今俺が行ってることは、上げ荒らしではない。
,_'(_ ノ_ヽ ヾl.> - ,イ;リ 正義という名の粛清だぁ!
{ f:テ} {'f:テ}',/\ヽ--//ヽ
ヽ,r─‐ 、ィ .、、 i l>Y<! i '、 バーニング!
/ iゝ_ノ iヽ /l |l l ',
lンヽ/ムノじ 転職時の注意事項。
下記の条件が全て当てはまる会社にご注意下さい。
・IT系 in Tokyo
・転職会議で2.5点
・転職会議の「その他>2ch情報」の欄で過去の労基2chスレが表示される 誰でも簡単にネットで稼げる方法など
参考までに、
⇒ 『半藤のブブイウイウレレ』 というサイトで見ることができます。
グーグル検索⇒『半藤のブブイウイウレレ』
0ZCR1RPKZW