《代码整洁之道》笔记[1.命名]

关于命名

1. 名副其实

$ad->cloud()->ads(new AttributeFilter('status', Ad::STATUS_ACTIVE));

其实Query和AttributeFilter是一样的,但是一定要用Filter,因为这里是做Filter的事情。

如果你写出一个类,名叫“自行车”,然后后来写了一个方法:

$car = new 自行车;
$car->踩刹车();

典型的名不副实的错误!
如果“自行车”可以代替“小轿车”,也最好用 class 小轿车 extends 自行车(当然,这会犯另外一个问题),
然后使用 $car = new 小轿车。

2. 避免误导

下面的方法返回的是啥?

$ad->get('categorys');
$ad->get('categoryEnglishName');
$ad->get('createdTime');

3. 有意义的

$ad = new Ad;
$_ad = $ad->causeAd();
$tmpAd = $_ad->related();

$_ad是啥?$tmpAd是啥?
不要因为这是暂时的变量或者private的变量就可以随便起名,否则最终被恶心到的是你自己。

4. 读得出来

比如:$c = new Category,$cs是categorys,但是在编码时,思维会断一下。
再比如:antispamBoobyTrap,虽然在知道它的用途之后,大家都会觉得挺好玩的。。。
但是,别拌可爱,别用双关语。

5. 考虑搜索

写代码其实是读代码的过程。
如果想搜索一个类的使用实例时,如果这个类名字叫 class User,
然后还有几个类叫class UserOrder,class UserAddress,class UserExtendsInfo…
恭喜!杯具。。。。

6. 短,再短

之前写过一篇blog,lib里面的class应该是一个名词(名词短语),方法名应该就是一个动词(动词短语)
不是class knockThreeCmNailIntoPineHammer,而是class Hammer。

干掉驼峰是简洁的好办法。

7. 一一对应

下面的$r是什么东西?

$rule = new Rule();
$rules = $rule->getList();
if (!empty($rules)) {
foreach ($rules as $r)
$r->deal($ad);
}

或者,下面的$a又是什么东西?

$ads = $ad->cloud()->ads();
foreach ($ads as $a) {
if ($ad->title == $a->title)
echo 'duplicate title!';
}

还有,还有。。。
insert和append有啥区别? sort和order有啥区别?
避免混淆的好办法是一个概念只对应一个名字。

比如在所有的代码里class Bike的实例最好是一个统一的名字。
不要一会是$bike = new Bike,一会又是$bicycle = new Bike,然后$bke = new Bike;
很多时候,bug就是这样弄出来的。

8. 正常思维

$i应该就是一个计数器,$url应该就是一个URL字符串。

risk game

risk是个很不错的桌面游戏,中文翻译为“大战役”,据说有长久的历史。

玩起来很耗时间,不习惯“浪费”时间的同学也可以找单机版来玩,电脑的AI也还不错。

下载了单机版,和电脑玩了一下午,最后终于赢了最菜的电脑们一局。
总结一下个人的经验:

1. 地域很重要,独占某大洲就可以在每轮多增兵,亚洲虽然有7个,但是地域众多,与很多大陆“接壤”,易攻难守。北美和欧洲稍好,但是需要守住的隘口也很多,如北美要守阿拉斯加、格林兰和墨西哥三个地方。南美、非洲和大洋洲地域最少,但也最好控制。个人比较喜欢从大洋洲开始布局,只有一个与亚洲相邻的口,且很容易在开局的时候就独占,获得额外增兵名额打开局面,且进可攻最肥沃之亚洲。

2. 抢占先机也很重要,如果是6人玩,一开始能灭掉一家,获取其手牌相当重要。因为3张手牌就可能有机会组合成增很多兵的bonus。

3. 最后局面变化很大。我最后一次赢的时候一开始3家各灭掉另外3家,形成3足鼎立的局面,其中我最弱小,被打压得龟缩在大洋洲。后来终于憋出了一次bonus增兵的机会,就马上反击,灭掉一家,独占了90%的地盘,把另外一家压到北美的4块地里。然后它也bonus增兵一次,反扑了70%,但是最后拉锯几次之后还是因为我“地大物博”,产兵众多而被灭。

最后,骰子的运气也很重要,某次电脑人品爆发,连掷10几个6点,我以优势兵力打了三次都没打下阿富汗。。。太汗了。。。

最最后,推荐大家都来玩~ 哈哈!

——————–[又是一晚的分割线]——————–

晚上又玩了很多轮,有些新的感觉:

– 先手的优势很大,六个人中的第一个不仅在选地盘的时候有先机,而且率先进攻的话更有机会获胜。

– 游戏名不虚传,risk——真的是要冒险。有一次,我最后一个选地,但是第6回合冒险了一把,在大家都获得2、3张手牌但还没有使用的时候先孤军深入,歼灭了一家,在获得他的手牌后,继续以集中消灭敌人有生力量为目标,每次干掉一个都能获得他的手牌并增兵,最后一鼓作气的全拿下了。