X



美しいコードのCGIを愛でるスレ
0001美しいコードを愛でる会
垢版 |
02/03/19 02:59ID:HVLinBmy
世の中ゲロンパに汚いコードなPerlのCGIスクリプトが反乱している。
もちろんperlstyle.podに則って自分で書くのも良いさ。
あぁオレはそうしている。
でもな。KENTやレスキューのコードがスタンダードだと勘違いしているやつが氾濫しては問題があるだろう。
そこで美しいコードを誇るCGIスクリプトを集め、皆で愛でようでは無いか。

最低条件
* use strictしてること(-wTは任意)
* 変数、サブルーチン、メソッドには意味のある名前を割り当てていること
* 更新されていること
* 作者と連絡がとれること(メアド、更新されているWebサイト)
0012nobodyさん
垢版 |
02/03/19 11:17ID:???
なんで -w だと一度だけ出てくる変数が警告されるの?

一度だけ出てくるもの
セットする前に使用されるスカラー変数
複数回定義されるサブルーチン
サブルーチンの再帰が 100 以上

このへんが警告喰らうのも分からん。
0013nobodyさん
垢版 |
02/03/19 11:17ID:WphNZTP7
あげとこう
0014nobodyさん
垢版 |
02/03/19 11:23ID:???
>>12
一度だけでてくる変数が警告されるのは、typoの可能性があるからじゃないかな?
サブルーチンの再帰が100以上ってのはすごいな。見たことないけど警告したいね(笑)
サブルーチンを複数回定義するんだったら別のものにした方が安全という思想があれば警告すると思う。
セットする前に使用されるスカラー変数にも警告でると思うけどな(笑)

てなかんじですが?
0015nobodyさん
垢版 |
02/03/19 11:35ID:WphNZTP7
> 一度だけでてくる変数が警告されるのは、typoの可能性があるからじゃないかな?
typoの意味が分からんかった。googleすると「タイプミスのこと」とな(^^;
なるほど。そういう意味なら納得。

変数のセットする前,というのは my とかで宣言する前,という意味ですか?
0016nobodyさん
垢版 |
02/03/19 11:48ID:WphNZTP7

-w 1 度しか使われない識別子、設定される前に使われている変
数に警告を出します。 サブルーティンの再定義、未定義の
ファイルハンドルの参照や、read-only でオープンしたファ
イルハンドルへの書き込みにも警告を出します。 また、数
値に見えない値を数値として使った場合、配列をスカラであ
るかのように使った場合、100 段階以上のサブルーティンの
再帰、その他たくさんの事に警告を出します。 perldiag
manpage と perltrap manpage を参照してください。

なるほど。空の変数をprint とかで呼び出してる場合に警告するのね。
001710
垢版 |
02/03/19 13:05ID:???
>>11
いや、自演なんてしないよ。
日本でいいのってなんかある?
0019nobodyさん
垢版 |
02/03/19 22:05ID:???
>>10の評価(適当)

> 1:ttp://www.h14m.org/
システムが巨大すぎて読む気が起こらず。
とりあえずイメージキャラクタが痛い。

> 2:ttp://www04.u-page.so-net.ne.jp/yd5/wing/support/
HTMLが糞なのでダウソしなかった
> 3:ttp://skully.lib.net/c-board.shtml
HTMLが糞なので以下略。
0020nobodyさん
垢版 |
02/03/19 23:32ID:???
全部Perlスクリプトのコードとしての評価じゃないな。
まあ、CGIとしてはHTMLは重要か。
0021nobodyさん
垢版 |
02/03/19 23:44ID:???
でも、2も3もスキン機能があるんだから、使う側がいかようにもすれば良いんじゃないか?

で、ageとくか。
002219
垢版 |
02/03/19 23:56ID:???
ファイルが10枚以下でHTMLがそこそこまともならソース読むぞー。

0023nobodyさん
垢版 |
02/03/20 00:01ID:???
美しいコードって、実際どういうコードのこと言うんだ?
0025nobodyさん
垢版 |
02/03/21 00:26ID:???
>>23

ぱっと思いつくのはこんな感じかな。

*一貫性のあるコーディングスタイル*
 趣味や職場によってかわるが、perlstyle.podに近ければとりあえず良し。
*一貫性のあるインデント*
 インデントすらしてない奴有るんだよね。。。
*メソッドの行数は10行未満が望ましい*
 チョー長いサブルーチンや、サブルーチンにすらしてないようなコードはX
*意味のある名前を使っていること*
 1も出してたけど意味の無い変数名を付けない。
 メソッド名は宣言的な名前を使う。多少長くても問題なし。
*無意味な省略形の名前を使っていないこと*
 ループ内の $i は許そう。
*同じことを複数の場所でやっていないこと*
 コピー&ペーストで書いたコードはこうなってるのが多い。
 ある機能を変えたいときに複数の場所を変えなければいけないコードは×
*Perlの機能を有効活用していること*
 配列の要素を全部舐めるのにCっぽいことしたりしない。mapもgrepも上手く使え。


逆に「こーいう書き方されるとムカツク」ってのは挙げやすそうっすね。
002625
垢版 |
02/03/21 00:32ID:???
忘れてた。

*スコープを意識していること*
 my $hoge = 'hello world'
 sub function {
     substr $hoge, 6, 5;
 }
 とか、無駄にスコープを跨いで変数使われたりするとスゲー読みにくくなる。
 mod_perlでヤナ思いするし。
0027nobodyさん
垢版 |
02/03/21 09:52ID:FXfspbxz
ゆいチャットのコードが評価される点は「改行を極力減らした」って点だけなの?
0029nobodyさん
垢版 |
02/03/21 15:30ID:???
っていうか、>>1とか>>25の書いてることを満たしてるPerlスクリプトは、もう無いのか?
>>10で書いたものだけか?
情けないな。
0032nobodyさん
垢版 |
02/03/21 20:12ID:???
(´-`).。oO(なんで Perl の時点で綺麗なんてありえないってことに気付かないんだろう・・・)
0033nobodyさん
垢版 |
02/03/21 20:19ID:???
(´-`).。oO(Perlでも「マシ」な方のスクリプトを挙げようという趣旨なのでは・・・)
0034nobodyさん
垢版 |
02/03/21 20:37ID:???
-wは必須だろ。
まあ、警告吐くモジュールもあるから、本番稼動中は無しにしても、
テストではつけるべし。
0035nobodyさん
垢版 |
02/03/21 22:20ID:???
>>32
じゃあなんだときれいなソースできるのかな?
COBOL?FORTRAN?BASIC?ASM?
0036nobodyさん
垢版 |
02/03/21 22:22ID:dJmFvqS+
スーパーレンタルサーバー誕生!ホームページ作りには当サイトをご利用ください。
http://www.web-free.info
CGI・SSI制限なく使用可能です。

0037nobodyさん
垢版 |
02/03/21 23:00ID:???
>>35
Cを敢えて外しているのには何か意図が?
0038nobodyさん
垢版 |
02/03/21 23:05ID:???
>>37
そもそもきれいなソースなんかあり得ないから。
0039nobodyさん
垢版 |
02/03/22 00:16ID:???
>>38
君の美的感覚は疑わざるを得ない。

とか書いて思ったけど、人によって価値観違うから
あまり強くはいえないよね。
0040nobodyさん
垢版 |
02/03/22 08:35ID:vhJfDKGC
>>35

「きれいなソース」でCGIを書くなら、RubyかDelphiでしょう。
0041nobodyさん
垢版 |
02/03/22 09:51ID:5zrp8DGK
いいコードを見るといろいろ参考になるねー。
php もいい?
0042nobodyさん
垢版 |
02/03/22 09:55ID:jHjSEJvi
コメントのないソースはどんな言語でも糞。
0043nobodyさん
垢版 |
02/03/22 10:06ID:5zrp8DGK
関数にコメントつけるときは,
その関数がどういう関数なのかという説明と,
引数や戻り値の説明もあったほうがいいのかな?
0044nobodyさん
垢版 |
02/03/22 11:01ID:2zj+wCNW
>35>40 君達の美的感覚は調整が必要です。 最適解は scheme
0050nobodyさん
垢版 |
02/03/22 20:50ID:???
きれいなコードを書けているつもりになれる言語だね。
0052nobodyさん
垢版 |
02/03/22 20:54ID:???
>>50
普通ソースなんて人に見せるものじゃないから、
自分一人でうっとりしていればいいんだよね。
グループやチームでソース書く必要あるんだったら、
美しさというより、ほかのメンバーにわかりやすい内容で書けばいいのであって、
結局美しさになんの意義も意味もないね。
ソースではなく、完成したものの出力が美しく、処理が機能的であればよいのであって、
ソースが美しいかどうかなぞと言うことは、手段の目的化以外の何者でもない。
0053nobodyさん
垢版 |
02/03/22 21:14ID:???
>>52
漏れは、美しさ=わかりやすさだと思うな。
トリッキーなコードばっかり書いてる奴は逝ってよいよ。
0054nobodyさん
垢版 |
02/03/22 21:17ID:???
>>53
それを美しさと感じる人もいるけどね。
0056nobodyさん
垢版 |
02/03/23 00:02ID:???
一度トリッキーなコードの魅力に触れると
普通にしっかりと書いてあるコードが冗長に見えていかん
005753
垢版 |
02/03/23 00:06ID:???
>>54,56
いやぁ、自分で書いて自分でうっとりする分にはいいんだけどね。
ム板のトリッキースレとか好きだったし。
ただ、それを(略
0059nobodyさん
垢版 |
02/04/09 23:33ID:/gHRipFv
前の会社で、
「あいつのソース、綺麗なんだけど、動かないんだよなぁ〜」
って人いたよ。
0061F11
垢版 |
02/04/10 21:12ID:RNZ++qE3
なんつーか、死ぬほどサブルーチンだらけのソースはどうですか。
全体の8〜9割がサブルーチン。
0062nobodyさん
垢版 |
02/04/10 22:01ID:???
>>61
ああ、そういうのよくあるよね。
最初に
&read
&html
&end
みたいな感じで、あと全部サブルーチンなの。
俺は嫌い。だって重複して使われてるわけでもないのに意味ないじゃん。
しかも読みにくいよ。
0063nobodyさん
垢版 |
02/04/10 22:06ID:???
>重複して使われてるわけでもないのに意味ないじゃん。
恥ずかしい。

>しかも読みにくいよ。
恐らく、あなたのソースコードのほうが読みにくいでしょうね。
0064nobodyさん
垢版 |
02/04/10 22:09ID:???
mod_perlを使うとき、main()等を設けるほどの几帳面さが役に立つ。
0065美しいコードを愛でる会
垢版 |
02/04/10 22:25ID:9zLUZHR0
>>61
>>62
そーいうのが困るんだなこれが。

処理のブロック(固まり)ごとにサブルーチン化して、
やっていることを表す適切な名前を付るのが王道。

コメントつける暇あったら、
サブルーチン化して適切な名前を付けて下さい。
# このへんは「リファクタリング」を見よって感じ。
0066nobodyさん
垢版 |
02/04/10 22:32ID:EI+45BxU
>>63
激しく同意。

>>しかも読みにくいよ。
>恐らく、あなたのソースコードのほうが読みにくいでしょうね。
ここらへんが特に。

サブルーチン入れて読みにくいなんて逝ってる奴なんて
長大スクリプト組んだ事無い奴くらいじゃないの?
0067美しいコードを愛でる会
垢版 |
02/04/10 22:51ID:9zLUZHR0
なぜサブルーチン化するのか?

何度も利用するからってのも理由の一つだけど、

 - その処理ブロックに名前を付けることで処理内容を予測しやすくする。
 - スコープを狭めることで変更に伴う影響範囲を小さくする。

ってのがあると思う。
スコープを狭めるってのは実は重要で、
これをやっていないコードはある部分を変更したいんだけど
それ以降の(含むそれ以前の)コードにどう影響が生まれるかが
とても分かりにくくなってしまう。

まぁ自分で自分用のコード書いているうちは
こーいう問題にあうことはないんだろうけど。
0068F11
垢版 |
02/04/10 23:01ID:RNZ++qE3
自分もサブルーチン作りまくり派なんですが、
細かくしすぎかなぁ感もあって、どこまでやっていいものか。
たとえ2,3行のソースでも色々な場所で使いまわす場合はサブルーチン化したりしてます。
入れ子になってたりもします。
極例ですが下記みたいな流れになってたりします。
自分では見やすいんですが、ちょっと肥大化してる感がいなめませぬ
やっぱ入れ子入れ子にしすぎると処理的に重くなりますか?


----------------下記----------------------------

&a0();

aub a0{
&a1();
&a2();
}


sub a1{

}

sub a2{
a3();
}

aub a3{

}
0069nobodyさん
垢版 |
02/04/10 23:05ID:???
a1とかの名前だとアレだけど、
役割がしっかりと分担されてるなら構わないと思う。(俺は)
007063
垢版 |
02/04/10 23:13ID:???
俺は長いソースのこと言ってんじゃねーぞー。
30行のソースでもサブルーチン化しちゃうやつが同じクラスにいるー。
大嫌いだーーー!!
普通に書けバカー!読みにくいんだよ!!このサブルーチンヲタが!!

と言い訳してみるテスト
0071nobodyさん
垢版 |
02/04/10 23:19ID:???
>70
番号間違ってるよ・・・
007262
垢版 |
02/04/10 23:24ID:???
>>71
うるせーばかー!!
しかもな○橋!おめーのソースはなー。最初に
&read
&html
&end
#て書いてるのにその下のサブルーチンの順番があべこべなんだよーー!
sub html {
}
sub read {
}
sub end {
}
#読みにくいんじゃボケー!!おまえとチーム組まされてる俺の身にもなってみろー!
#何がオブジェクト指向化だよん(はぁーと)だ!氏ねえええええ!!
0073美しいコードを愛でる会
垢版 |
02/04/10 23:39ID:???
>>72
サブルーチンの名前が適切かどーかって話はさておき
順番なんぞ検索すれば良いから重要じゃないね。
viで
/sub name
とか打つだけっしょ?
まともなエディタとそのエディタの使い方を覚えましょう。
0074nobodyさん
垢版 |
02/04/11 00:16ID:93K8BGh2
順番は気にした事ないな。。
0075nobodyさん
垢版 |
02/04/11 00:17ID:???
&を付けるのはいかがなものかと。
0076nobodyさん
垢版 |
02/04/11 00:48ID:???
>72
文脈から推察すると、超初心者のカジリたてって感じ?
プログラミングを理解してないくせに自分の思いこみだけで一方的な自分の意見を
ごり押しする人。
自分のレス番号間違ってることからしてもおっちょこちょいさん。
痛々しいネ!
0077nobodyさん
垢版 |
02/04/11 00:49ID:tSMOjiFh
endとかってサブルーチン名にできたんだ?
0078Name_Not_Found
垢版 |
02/04/11 00:50ID:2Njp9iOK
& はあまり良くないの??初耳っす

0079nobodyさん
垢版 |
02/04/11 00:55ID:???
read( )って書く方が普通だべ?
&はオヤジくさい。
0080nobodyさん
垢版 |
02/04/11 01:25ID:???
>79
わたしの場合は、必ず & つかってしまうくせがついているが、現にわたしは
オヤジだからOKってことね。安心した。
ただ、すでに関数として用意されている read などをサブルーチン名に使うの
には抵抗があるなー。
ところで & を付けるのはやめたほうがいいみたいなことってなんかの本にでも
載ってるの? たまにそう言う人がいるけど今まで受け流してきたからハッキリ
とした理由が知りたいなー。
なんとなく namazu臭 がするのはわたしだけ?
0081nobodyさん
垢版 |
02/04/11 01:49ID:???
Perl5の時代になって久しいが、今時サブルーチンの呼び出しに&を付ける
なんて書いてある本あるのか?リファレンス使うときしか出てこなくないか?
0082nobodyさん
垢版 |
02/04/11 02:11ID:8LiumuzI
グラブとリファレンスってどう違うんですか?
サブルーチンにどっちで渡せばいいの?
008480
垢版 |
02/04/11 02:27ID:???
>81
今時の本に書いてないというだけのことで、やめたほうがいいということでは
ないということなんだね。了解!
一般関数と区別する意味でも使ったほうがむしろ読み易い気がするのはわたしだけ?
わたしの場合、&をつかわないときといったらシグナルハンドラにセットするとき
ぐらいかな?
ラクダ本には引数なしのサブルーチンは & を使うことで効率がよいとある。

0085nobodyさん
垢版 |
02/04/11 09:17ID:???
おまえらラクダ本くらいちゃんと読めよな。
0086nobodyさん
垢版 |
02/04/11 09:36ID:???
>&をつかわないときといったらシグナルハンドラにセットするときぐらいかな?

マジかよ。俺が&を明示的につけるのは

・シグナルハンドラの設定
・オーバーロードメソッドの設定
・スタックをそのままで呼び出し(&foo;)
・リファレンスの取得(こりゃ言語的制約だからしょうがないが。)

てな感じだが。
ビルトイン関数はどうせ色でわかるし。
0087nobodyさん
垢版 |
02/04/11 17:58ID:???
&が親父臭いって意味がわからん
0089nobodyさん
垢版 |
02/04/11 19:18ID:???
書いても書かなくても変わらない場面では、書いても意味が無いって意味では同意。

おれは書かない派。
(カッコ)も省けるところは省いちゃう派。
0090nobodyさん
垢版 |
02/04/24 20:22ID:kwCa0Ndo
関数やメソッドの名前でこんな風にしとけってのあるかな?
例えば、何かを確認するような関数ならis****にしとけとか
0091nobodyさん
垢版 |
02/04/28 02:48ID:caIzyTmE
>90
自分は真偽が返り値になるメソッドをis***にしてる。
あと決めてるのはprintみたく返り値を期待しない関数をdo***とするくらい。
0092nobodyさん
垢版 |
02/04/28 14:02ID:???
>90, 91
チョット認識がずれてる部分もあるが、それって今ではオブジェクト指向の
言語では普通にやられていること。

形式としては、動詞+目的語 のような感じ。目的語は省略する場合もあるが、
もしあれば先頭は大文字が一般的。

オマエらを殺す関数なら killYou とかね。
0093nobodyさん
垢版 |
02/04/28 20:29ID:???
>>92
ちなみにPerlではキャピタライズは普通しなくて

$厨房->kill_you()

が普通な。
perldoc perlstyle
009593
垢版 |
02/05/03 00:51ID:???
>>94
あっ、好い返し方(笑)
0096nobodyさん
垢版 |
02/05/18 08:49ID:???
>>94
変数に漢字が使えたら可読性が上がるような気がする。(やはり表意文字?)
制御文とかは、むしろ英語の方がいいけど。
0097nobodyさん
垢版 |
02/05/21 13:40ID:???
>96
それわかる。
英語力がないからってローマ字で、なんてやってたらすげぇかっこ悪いもん。
今はいちいち日本語を英訳して分かりやすそうなのにしてるけど、英語ができる人から見たら変な単語使ってると思う。
0098nobodyさん
垢版 |
02/05/24 19:56ID:???
漢字ですか。タイピング量が爆増するので嫌になったことがあります。

使いたかったらフィルタ通すなりFilterモジュールかませばどうにでもなるからやってみたら?
http://bulknews.net/lib/archives/Filter-Pyuuta-0.01.html

っつっても「どこでもポリモーフィズぅ〜」を目指すと、
何気にジェネリックな名前を付けたくなったりするから、
英語で困るってことは少ないけどなぁ。

異様に長い名前もあったけど(笑)
change_element_with_xml_compiled_object_and_its_state()
とか。
0099nobodyさん
垢版 |
02/05/26 05:02ID:PkjyxO6g
>>96
コメントだけで充分だと思うけどな、
あと、コメントをローマ字と変な英語のやつ困る、
data number とか、しちゃうやつ、
dataの順番か、個数かわからん
0100nobodyさん
垢版 |
02/05/28 11:48ID:???
>>53
はげしく同意!

>>59
はげしくわらた

>>10
C-BOARDのソースは、とりわけ綺麗という訳でもないとは思うけど、
昔随分と勉強させてもらったよ。
確かにHTMLはカスだとは思うけどね。

なんかトラブルあったみたいで、元作者はもう開発やめてるみたいだね。
010159
垢版 |
02/06/08 16:03ID:XPfmb/Ca
ちにみに、その話Perlでは無くて、6502のアセンブラだったよ、
65系、680x系って、気を使って書かないと、非常に読みずらいんだよね
0103nobodyさん
垢版 |
03/02/23 05:00ID:???
6802はメモリにストアしてロードして計算の果てしない繰り返し。
6809はパズル。書き方によって2割りは効率がかわる。
68000は逆にすっきりしてて、直交具合がよくて
レジスタがデータだけで8本あるから直感で書ける。

このスレ読んだ感想。。
単体モジュールテストぐらいはやろうぜ!
0106山崎渉
垢版 |
03/04/20 06:17ID:???
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0107山崎渉
垢版 |
03/05/22 02:18ID:???
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
0108山崎渉
垢版 |
03/05/28 17:11ID:???
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0109山崎 渉
垢版 |
03/07/15 11:23ID:???

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
01101 ◆5aiQ5DvWjw
垢版 |
03/07/16 12:07ID:???
>>84
ワラタ

ところではなしは変わるけど、携帯ゲーム機"プレイステーションポータブル(PSP)

 このPSPは、新規格UMD(ユニバーサルメディアディスク)というディスクを利用しており、そのサイズは直径6cmととても小さい(CDの半分程度)。 容量は1.8GBとなっている。
画面は4.5インチのTFT液晶で、480px x 272px(16:9)。MPEG4の再生やポリゴンも表示可能。外部端子として、USB2.0とメモリースティックコネクタが用意されているという。

この際、スク・エニもGBAからPSPに乗り換えたらどうでしょう。スク・エニの場合、PSPの方が実力を出しやすいような気がするんですが。
任天堂が携帯ゲーム機で圧倒的なシェアをもってるなら、スク・エニがそれを崩してみるのもおもしろいですし。かつて、PS人気の引き金となったFF7のように。

突然変な事言い出してスマソ・・・・
GBAと比較してみてどうなんですかね?(シェア以外で)
0111山崎 渉
垢版 |
03/08/02 02:30ID:???
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0112ぼるじょあ ◆ySd1dMH5Gk
垢版 |
03/08/02 05:05ID:???
     ∧_∧  ∧_∧
ピュ.ー (  ・3・) (  ^^ ) <これからも僕たちを応援して下さいね(^^)。
  =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
  = ◎――――――◎                      山崎渉&ぼるじょあ
レスを投稿する


ニューススポーツなんでも実況