namazu-dev(ring)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
coding-rule-mknmz.txt
- From: Satoru Takabayashi <satoru-t@xxxxxxxxxxxxxxxxxx>
- Date: Mon, 30 Aug 1999 19:02:23 +0900
多くの人に mknmz をいじってもらうために、mknmz の coding 規
則をまとめました。coding-rule-mknmz.txt というファイル名で
commit しておきました。参考までに、このメイルの末尾に全文を
添付しておきます。ご意見をもらえると嬉しいです。(この規則に
自信があるわけではないので)
最近、悩んでいるのは reference にそれとわかる名前をつけるべ
きか、ということです。野首さんは $contref といった名前をつけ
て区別していますね。
-- Satoru Takabayashi
Namazu のコーディング規則 - Perl編
mknmz固有の事情
* debugメッセージを出力するときは必ず
util::dprint() を使う
* verboseメッセージを出力するときは必ず
util::vprint() を使う
* エラーなどの理由で die するときは必ず
util::cdie() を使う
* ファイルを開くときには必ず util::efopen() (エラーの時に
util::cdie() する)または util::fopen() を使う
* while (<>) {} や while (<$fh>) {} を禁止する。$_ はグロー
バル変数であるため、危険。代わりに
while (defined(my $line = <$fh>)) {} とする。
* 一時ファイルを作るときは必ず
my $tmpfile = util::tmpnam("NMZ.foobar");
として一時ファイルの名前を取得する。
* ファイルの中身をまるごと読み込むときは util::readfile()
を使う。 join '' <$fh> より速いはず。
* ファイルを rename するときは必ず util::Rename() を使う。
OS/2 対策。
* プログラム全体に影響をおよぼすグローバル変数は
lib/var.pl.in に定義する。
* mknmz 内だけに影響をおよぼすグローバル変数は
src/mknmz.pl.in に定義する。 $SYSTEM のみ例外。
* ユーザが mknmz.conf, ~/.mknmzrc にて変更したいであろう変
数は lib/conf.pl.in に定義する。
書法
* 必ず -w オプションを用いる
#! /usr/bin/perl -w
* 必ず use strict する
* local() は使わない
* 変数は使う位置で宣言する
- C言語のようにブロックの最初で宣言する必要はない
* 変数の宣言時にはできる限り初期化を行う
* for は for my $tmp (@foo) { ... } のように用いる
- my $tmp の部分が要 ($tmpのスコープをループ内に限定する)
* 戻り値は陽に return する
- サブルーチン最後の式が return される、というルールに頼らない
* built-in関数呼び出しの際は省略できる丸括弧はできるだけ省く
- ○ substr $str, $offset, $len; × substr($str, $offset, $len)
* 正規表現では $&, $', $` を使わない
- プログラム全体が遅くなるため
* サブルーチンの呼び出しは foobar() とする
- &foobar は不可 ("&" は不要)
* サブルーチンの定義ではプロトタイプ宣言を行う
- sub foobar($$$) { ... } のように
* $_ はできる限り使わない
- $_ はグローバル変数なので危険
* open() は使わない。 use IO::File を用いて
my $fh = new IO::File; $fh->open() とする
* ファイルは陽に閉じず、 destructor にまかせる
- $fh->close() しない (スコープで制限する)
* リファレンスは大いに活用する
* 既存の perl module を活用する
- 車輪の再発明をしない
* $| といった特殊変数はできるだけ用いない
- $| は STDOUT->autoflush(1) で代用できる
* グローバル変数はできるだけ使わない
* コードはできる限りモジュール化する
- APIを定めて拡張を容易にする
* 必要に応じて Object Oriented Programming を取り入れる
- すべてを OOP で書くことはない
* 長い正規表現には適宜 /x モディファイアを適用する
* 変数を使った正規表現には安全なら /o モディファイアを適用
する
* コメントは英語で書く
名前規則
* テンポラリな変数は型を問わず tmp という名前にする
* for 文のカウンタには $i, $j, $k を用いる
- 3段より深くしないように気をつける
* サブルーチン名は動詞 (+目的語)、変数名は名詞
- e.g. update_registry()
* 語の連結にはアンダースコア ('_') を用いる
- e.g. get_os_name(), $os_name
* 局所変数の名前は小文字
* グローバル変数の名前は capitalize し、アンダースコアを省
略する (要検討)
- $IndexType
* 配列、ハッシュの変数名は複数形にする (要検討)
- @files
* 変数名の極端な省略はしない
- $on (OS name) などは不可
* が、必要に応じて省略する (要検討)
* 省略のルールは明確化する
- file handle -> fh
- pointer -> ptr
- index -> idx
- current -> cur
- protocol -> proto
- length -> len
- string -> str
- argument -> arg
- source -> src
- destination -> dest
- control -> ctrl
- module -> mod
- language -> lang
- initialize -> init
- variable -> var
- 他にもあれば追加する
* package が異なれば同じサブルーチン名を用いて良い
インデント
* インデントは 4文字単位
$foo = 1 + 2 + 3;
$bar = ((1 + 2) + 3) * 4;
if ($foo == $bar) {
print foobar($foo, $bar), "\n";
} else {
die "error";
}
sub foobar ($$) {
my ($foo, $bar) = @_;
return $foo + $bar;
}
Perl関連リンク
* CPAN
<ftp://ring.asahi-net.or.jp/archives/lang/perl/CPAN/>
* Perl Style
<ftp://ftp.dti.ad.jp/pub/lang/CPAN/doc/FMTEYEWTK/style/slide-index.html>
* perl5.005_02のドキュメント
<http://www.kt.rim.or.jp/%7ekbk/perl5.005/index.html>
* perl5.004_04のドキュメント
<http://www.kt.rim.or.jp/%7ekbk/perl5.doc/index.html>
* Perl information memo
<http://www.st.rim.or.jp/~cond/perlinfo/index.html>
* /pub/IIJ/dist/utashiro/perl directory
<ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl>
* /pub/lang/CPAN/authors/Hirofumi_Watanabe directory
<ftp://ftp.dti.ad.jp/pub/lang/CPAN/authors/Hirofumi_Watanabe>
* FMTEYEWTK
<ftp://ftp.dti.ad.jp/pub/lang/CPAN/doc/FMTEYEWTK/index.html>
* Yahoo! - Computers and Internet:Programming Languages:Perl
<http://www.yahoo.co.jp/Computers_and_Internet/Programming_Languages/Perl/>
* JPerl for Win32
<http://www.yk.rim.or.jp/~hizumi/perl/index.html>
* Index of /archives/lang/perl/CPAN/modules/by-authors/Gurusamy_Sarathy
<http://ring.nacsis.ac.jp/archives/lang/perl/CPAN/modules/by-authors/Gurusamy_Sarathy/>
* Learning Perl/Tk
<http://tanaka-www.cs.titech.ac.jp/~ueki/PerlTk/index.html>
* ActiveState Tool Corp. - Professional tools for Perl developers
<http://www.activestate.com/>
* Index of /archives/lang/perl/CPAN/modules/by-module/Tk
<http://ring.nacsis.ac.jp/archives/lang/perl/CPAN/modules/by-module/Tk/>
* What's wrong with Perl
<http://www.stud.ifi.uio.no/~larsga/download/artikler/perl.html>