美しいコードのCGIを愛でるスレ
世の中ゲロンパに汚いコードなPerlのCGIスクリプトが反乱している。 もちろんperlstyle.podに則って自分で書くのも良いさ。 あぁオレはそうしている。 でもな。KENTやレスキューのコードがスタンダードだと勘違いしているやつが氾濫しては問題があるだろう。 そこで美しいコードを誇るCGIスクリプトを集め、皆で愛でようでは無いか。 最低条件 * use strictしてること(-wTは任意) * 変数、サブルーチン、メソッドには意味のある名前を割り当てていること * 更新されていること * 作者と連絡がとれること(メアド、更新されているWebサイト) なんで -w だと一度だけ出てくる変数が警告されるの? 一度だけ出てくるもの セットする前に使用されるスカラー変数 複数回定義されるサブルーチン サブルーチンの再帰が 100 以上 このへんが警告喰らうのも分からん。 >>12 一度だけでてくる変数が警告されるのは、typoの可能性があるからじゃないかな? サブルーチンの再帰が100以上ってのはすごいな。見たことないけど警告したいね(笑) サブルーチンを複数回定義するんだったら別のものにした方が安全という思想があれば警告すると思う。 セットする前に使用されるスカラー変数にも警告でると思うけどな(笑) てなかんじですが? > 一度だけでてくる変数が警告されるのは、typoの可能性があるからじゃないかな? typoの意味が分からんかった。googleすると「タイプミスのこと」とな(^^; なるほど。そういう意味なら納得。 変数のセットする前,というのは my とかで宣言する前,という意味ですか? -w 1 度しか使われない識別子、設定される前に使われている変 数に警告を出します。 サブルーティンの再定義、未定義の ファイルハンドルの参照や、read-only でオープンしたファ イルハンドルへの書き込みにも警告を出します。 また、数 値に見えない値を数値として使った場合、配列をスカラであ るかのように使った場合、100 段階以上のサブルーティンの 再帰、その他たくさんの事に警告を出します。 perldiag manpage と perltrap manpage を参照してください。 なるほど。空の変数をprint とかで呼び出してる場合に警告するのね。 >>11 いや、自演なんてしないよ。 日本でいいのってなんかある? >>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が糞なので以下略。 全部Perlスクリプトのコードとしての評価じゃないな。 まあ、CGIとしてはHTMLは重要か。 でも、2も3もスキン機能があるんだから、使う側がいかようにもすれば良いんじゃないか? で、ageとくか。 ファイルが10枚以下でHTMLがそこそこまともならソース読むぞー。 美しいコードって、実際どういうコードのこと言うんだ? >>23 ぱっと思いつくのはこんな感じかな。 *一貫性のあるコーディングスタイル* 趣味や職場によってかわるが、perlstyle.podに近ければとりあえず良し。 *一貫性のあるインデント* インデントすらしてない奴有るんだよね。。。 *メソッドの行数は10行未満が望ましい* チョー長いサブルーチンや、サブルーチンにすらしてないようなコードはX *意味のある名前を使っていること* 1も出してたけど意味の無い変数名を付けない。 メソッド名は宣言的な名前を使う。多少長くても問題なし。 *無意味な省略形の名前を使っていないこと* ループ内の $i は許そう。 *同じことを複数の場所でやっていないこと* コピー&ペーストで書いたコードはこうなってるのが多い。 ある機能を変えたいときに複数の場所を変えなければいけないコードは× *Perlの機能を有効活用していること* 配列の要素を全部舐めるのにCっぽいことしたりしない。mapもgrepも上手く使え。 逆に「こーいう書き方されるとムカツク」ってのは挙げやすそうっすね。 忘れてた。 *スコープを意識していること* my $hoge = 'hello world' sub function { substr $hoge, 6, 5; } とか、無駄にスコープを跨いで変数使われたりするとスゲー読みにくくなる。 mod_perlでヤナ思いするし。 ゆいチャットのコードが評価される点は「改行を極力減らした」って点だけなの? っていうか、>>1 とか>>25 の書いてることを満たしてるPerlスクリプトは、もう無いのか? >>10 で書いたものだけか? 情けないな。 (´-`).。oO(なんで Perl の時点で綺麗なんてありえないってことに気付かないんだろう・・・) (´-`).。oO(Perlでも「マシ」な方のスクリプトを挙げようという趣旨なのでは・・・) -wは必須だろ。 まあ、警告吐くモジュールもあるから、本番稼動中は無しにしても、 テストではつけるべし。 >>32 じゃあなんだときれいなソースできるのかな? COBOL?FORTRAN?BASIC?ASM? スーパーレンタルサーバー誕生!ホームページ作りには当サイトをご利用ください。 http://www.web-free.info CGI・SSI制限なく使用可能です。 >>37 そもそもきれいなソースなんかあり得ないから。 >>38 君の美的感覚は疑わざるを得ない。 とか書いて思ったけど、人によって価値観違うから あまり強くはいえないよね。 >>35 「きれいなソース」でCGIを書くなら、RubyかDelphiでしょう。 いいコードを見るといろいろ参考になるねー。 php もいい? 関数にコメントつけるときは, その関数がどういう関数なのかという説明と, 引数や戻り値の説明もあったほうがいいのかな? >35>40 君達の美的感覚は調整が必要です。 最適解は scheme >>40 Delphi厨はマ板に(◕ฺ∀◕ฺ)カエレ! きれいなコードを書けているつもりになれる言語だね。 >>50 普通ソースなんて人に見せるものじゃないから、 自分一人でうっとりしていればいいんだよね。 グループやチームでソース書く必要あるんだったら、 美しさというより、ほかのメンバーにわかりやすい内容で書けばいいのであって、 結局美しさになんの意義も意味もないね。 ソースではなく、完成したものの出力が美しく、処理が機能的であればよいのであって、 ソースが美しいかどうかなぞと言うことは、手段の目的化以外の何者でもない。 >>52 漏れは、美しさ=わかりやすさだと思うな。 トリッキーなコードばっかり書いてる奴は逝ってよいよ。 一度トリッキーなコードの魅力に触れると 普通にしっかりと書いてあるコードが冗長に見えていかん >>54 ,56 いやぁ、自分で書いて自分でうっとりする分にはいいんだけどね。 ム板のトリッキースレとか好きだったし。 ただ、それを(略 前の会社で、 「あいつのソース、綺麗なんだけど、動かないんだよなぁ〜」 って人いたよ。 なんつーか、死ぬほどサブルーチンだらけのソースはどうですか。 全体の8〜9割がサブルーチン。 >>61 ああ、そういうのよくあるよね。 最初に &read &html &end みたいな感じで、あと全部サブルーチンなの。 俺は嫌い。だって重複して使われてるわけでもないのに意味ないじゃん。 しかも読みにくいよ。 >重複して使われてるわけでもないのに意味ないじゃん。 恥ずかしい。 >しかも読みにくいよ。 恐らく、あなたのソースコードのほうが読みにくいでしょうね。 mod_perlを使うとき、main()等を設けるほどの几帳面さが役に立つ。 >>61 >>62 そーいうのが困るんだなこれが。 処理のブロック(固まり)ごとにサブルーチン化して、 やっていることを表す適切な名前を付るのが王道。 コメントつける暇あったら、 サブルーチン化して適切な名前を付けて下さい。 # このへんは「リファクタリング」を見よって感じ。 >>63 激しく同意。 >>しかも読みにくいよ。 >恐らく、あなたのソースコードのほうが読みにくいでしょうね。 ここらへんが特に。 サブルーチン入れて読みにくいなんて逝ってる奴なんて 長大スクリプト組んだ事無い奴くらいじゃないの? なぜサブルーチン化するのか? 何度も利用するからってのも理由の一つだけど、 - その処理ブロックに名前を付けることで処理内容を予測しやすくする。 - スコープを狭めることで変更に伴う影響範囲を小さくする。 ってのがあると思う。 スコープを狭めるってのは実は重要で、 これをやっていないコードはある部分を変更したいんだけど それ以降の(含むそれ以前の)コードにどう影響が生まれるかが とても分かりにくくなってしまう。 まぁ自分で自分用のコード書いているうちは こーいう問題にあうことはないんだろうけど。 自分もサブルーチン作りまくり派なんですが、 細かくしすぎかなぁ感もあって、どこまでやっていいものか。 たとえ2,3行のソースでも色々な場所で使いまわす場合はサブルーチン化したりしてます。 入れ子になってたりもします。 極例ですが下記みたいな流れになってたりします。 自分では見やすいんですが、ちょっと肥大化してる感がいなめませぬ やっぱ入れ子入れ子にしすぎると処理的に重くなりますか? ----------------下記---------------------------- &a0(); aub a0{ &a1(); &a2(); } sub a1{ } sub a2{ a3(); } aub a3{ } a1とかの名前だとアレだけど、 役割がしっかりと分担されてるなら構わないと思う。(俺は) 俺は長いソースのこと言ってんじゃねーぞー。 30行のソースでもサブルーチン化しちゃうやつが同じクラスにいるー。 大嫌いだーーー!! 普通に書けバカー!読みにくいんだよ!!このサブルーチンヲタが!! と言い訳してみるテスト >>71 うるせーばかー!! しかもな○橋!おめーのソースはなー。最初に &read &html &end #て書いてるのにその下のサブルーチンの順番があべこべなんだよーー! sub html { } sub read { } sub end { } #読みにくいんじゃボケー!!おまえとチーム組まされてる俺の身にもなってみろー! #何がオブジェクト指向化だよん(はぁーと)だ!氏ねえええええ!! >>72 サブルーチンの名前が適切かどーかって話はさておき 順番なんぞ検索すれば良いから重要じゃないね。 viで /sub name とか打つだけっしょ? まともなエディタとそのエディタの使い方を覚えましょう。 >72 文脈から推察すると、超初心者のカジリたてって感じ? プログラミングを理解してないくせに自分の思いこみだけで一方的な自分の意見を ごり押しする人。 自分のレス番号間違ってることからしてもおっちょこちょいさん。 痛々しいネ! read( )って書く方が普通だべ? &はオヤジくさい。 >79 わたしの場合は、必ず & つかってしまうくせがついているが、現にわたしは オヤジだからOKってことね。安心した。 ただ、すでに関数として用意されている read などをサブルーチン名に使うの には抵抗があるなー。 ところで & を付けるのはやめたほうがいいみたいなことってなんかの本にでも 載ってるの? たまにそう言う人がいるけど今まで受け流してきたからハッキリ とした理由が知りたいなー。 なんとなく namazu臭 がするのはわたしだけ? Perl5の時代になって久しいが、今時サブルーチンの呼び出しに&を付ける なんて書いてある本あるのか?リファレンス使うときしか出てこなくないか? グラブとリファレンスってどう違うんですか? サブルーチンにどっちで渡せばいいの? >81 今時の本に書いてないというだけのことで、やめたほうがいいということでは ないということなんだね。了解! 一般関数と区別する意味でも使ったほうがむしろ読み易い気がするのはわたしだけ? わたしの場合、&をつかわないときといったらシグナルハンドラにセットするとき ぐらいかな? ラクダ本には引数なしのサブルーチンは & を使うことで効率がよいとある。 >&をつかわないときといったらシグナルハンドラにセットするときぐらいかな? マジかよ。俺が&を明示的につけるのは ・シグナルハンドラの設定 ・オーバーロードメソッドの設定 ・スタックをそのままで呼び出し(&foo;) ・リファレンスの取得(こりゃ言語的制約だからしょうがないが。) てな感じだが。 ビルトイン関数はどうせ色でわかるし。 書いても書かなくても変わらない場面では、書いても意味が無いって意味では同意。 おれは書かない派。 (カッコ)も省けるところは省いちゃう派。 関数やメソッドの名前でこんな風にしとけってのあるかな? 例えば、何かを確認するような関数ならis****にしとけとか >90 自分は真偽が返り値になるメソッドをis***にしてる。 あと決めてるのはprintみたく返り値を期待しない関数をdo***とするくらい。 >90, 91 チョット認識がずれてる部分もあるが、それって今ではオブジェクト指向の 言語では普通にやられていること。 形式としては、動詞+目的語 のような感じ。目的語は省略する場合もあるが、 もしあれば先頭は大文字が一般的。 オマエらを殺す関数なら killYou とかね。 >>92 ちなみにPerlではキャピタライズは普通しなくて $厨房->kill_you() が普通な。 perldoc perlstyle >>93 未熟者め! $厨房->should_die(); >>94 変数に漢字が使えたら可読性が上がるような気がする。(やはり表意文字?) 制御文とかは、むしろ英語の方がいいけど。 >96 それわかる。 英語力がないからってローマ字で、なんてやってたらすげぇかっこ悪いもん。 今はいちいち日本語を英訳して分かりやすそうなのにしてるけど、英語ができる人から見たら変な単語使ってると思う。 漢字ですか。タイピング量が爆増するので嫌になったことがあります。 使いたかったらフィルタ通すなりFilterモジュールかませばどうにでもなるからやってみたら? http://bulknews.net/lib/archives/Filter-Pyuuta-0.01.html っつっても「どこでもポリモーフィズぅ〜」を目指すと、 何気にジェネリックな名前を付けたくなったりするから、 英語で困るってことは少ないけどなぁ。 異様に長い名前もあったけど(笑) change_element_with_xml_compiled_object_and_its_state() とか。 >>96 コメントだけで充分だと思うけどな、 あと、コメントをローマ字と変な英語のやつ困る、 data number とか、しちゃうやつ、 dataの順番か、個数かわからん >>53 はげしく同意! >>59 はげしくわらた >>10 C-BOARDのソースは、とりわけ綺麗という訳でもないとは思うけど、 昔随分と勉強させてもらったよ。 確かにHTMLはカスだとは思うけどね。 なんかトラブルあったみたいで、元作者はもう開発やめてるみたいだね。 ちにみに、その話Perlでは無くて、6502のアセンブラだったよ、 65系、680x系って、気を使って書かないと、非常に読みずらいんだよね 6802はメモリにストアしてロードして計算の果てしない繰り返し。 6809はパズル。書き方によって2割りは効率がかわる。 68000は逆にすっきりしてて、直交具合がよくて レジスタがデータだけで8本あるから直感で書ける。 このスレ読んだ感想。。 単体モジュールテストぐらいはやろうぜ! ━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━― ∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉 __∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄ >>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と比較してみてどうなんですかね?(シェア以外で) ∧_∧ ∧_∧ ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。 =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕 = ◎――――――◎ 山崎渉&ぼるじょあ read.cgi ver 07.5.0 2024/04/24 Walang Kapalit ★ | Donguri System Team 5ちゃんねる