5.可读性篇
如果代码要用于交流,首先要让人能看得懂,也就是要注意可读性,可读性好的代码看起来很舒服,用得明白,可读性差的代码晦涩难懂,让人不想往下看,日后可能自己都看不懂了。
提升可读性的代价往往是降低简洁度,就像提升运行效率的代价往往是降低编写效率,这个矛盾是很难调和的,其中的权重要根据实际需求而定,并非一定要分个孰优孰劣。
当然咯,如果仅用于解决问题,日后也不打算再做修改,那么没有必要太纠结于可读性,毕竟要提升可读性是很费脑子的,闹个对牛弹琴确实不太值得。
5.1 外观
5.1.1 缩进排版
【code1】 | @echo off | | for /l %%a in (1 1 9) do ( | | for /l %%b in (0 1 9) do ( | | if %%a%%b000 gtr 12233 ( | | echo gtr | | ) else ( | | echo lss))) | | ::效果是当 %%a%%b000 大于 12233 时显示 gtr 否则显示 lss,%%a%%b的范围是 10~99 | | ::欠揍吗?如果用这样的代码参加笔试,肯定第一个被毙掉。COPY |
【code2】 | @echo off | | for /l %%a in (1 1 9) do ( | | for /l %%b in (0 1 9) do ( | | if %%a%%b000 gtr 12233 ( | | echo gtr | | ) else ( | | echo lss | | ) | | ) | | ) | | ::现在很美观易懂了吧?COPY |
5.1.2 嵌套层次明晰
【code1】 | @echo off | | set date=%date:/=-% | | if "%date%" gtr "2011-12-16" if "%time%" lss "20:00:00" (echo 早了) else echo 晚了 | | ::当日期超过 2011-12-16 时,早于 20 点显示“早了”,否则显示“晚了” | | ::是不是看着很累。。。。COPY |
【code2】 | @echo off | | set date=%date:/=-% | | if "%date%" gtr "2011-12-16" ( | | if "%time%" lss "20:00:00" ( | | echo 早了 | | ) else ( | | echo 晚了 | | ) | | ) | | ::当日期超过 2011-12-16 时,早于 20 点显示“早了”,否则显示“晚了”COPY |
5.2 用注释介绍思路
【code1】 | set/ac=(b+=p=1)*100/(a=2000)+(n=0) | | ::这个看得懂吗?晕了吧?COPY |
【code2】 | set/ac=(b+=p=1)*100/(a=2000)+(n=0) | | | | ::这样看懂了吗?COPY |
【code1】 | @echo off&setlocal enabledelayedexpansion | | set str=@abcdefghijklmnopqrstuvwxyz | | for %%a in ("" -) do ( | | for /l %%b in (1 1 26) do echo !str:~%%~a%%b,1! | | ) | | pause | | ::先输出 a~z,再输出 z~a,这个有点难理解吧。。。COPY |
【code2】 | @echo off&setlocal enabledelayedexpansion | | set str=@abcdefghijklmnopqrstuvwxyz | | | | for %%a in ("" -) do ( | | | | for /l %%b in (1 1 26) do echo !str:~%%~a%%b,1! | | | | ) | | pause | | ::注释功不可没吧?COPY |
5.3 少用不常见的写法
【code】 | ec%undefined%ho;sdf^|f^ | | sd^ d^s&p^au^se fsdfsdf | | ::其实就是一句 echo;sdf|fsd ds & pause fsdfsdf | | ::只是这里利用了空变量、转义符在转义后消失、行尾 ^ 实现换行、pause 接受但忽略任何参数这几个特性构造了一段晦涩难懂的代码。 | | ::因为我们很少这么用,所以看着就别扭,就像象棋中炮的惯例是记载为炮二平五,比赛时为了让对手别扭,有些选手会故意左右翻转改为炮八平五,对手措手不及之下有时会记错局面发挥失常。COPY |
【code】 | for,/l;%%a;in,(0x7f=-1)do echo %%a | | ::常见的写法是 for /l %%a in (127 -1 0) do echo %%a,从 127 逐步减一到 0 | | ::我们见惯了以空格作为分隔符的 for,突然换一个写法就感觉十分不习惯 | | ::这里的 ;、,、=、空格、制表符 都是 for 语句的默认分隔符 | | ::而 for /l 以 start step end 的顺序逐个读取参数,不足的参数补为 0,超出 3 个的参数被忽略,并且能够接受十六进制和八进制数。 | | ::for 语句中,do 前是可以不带分隔符直接与 ) 相连的,类似的还有 if 中的 else,这技巧常用于简化函数,但是对大部分人而言是会造成水土不服的。COPY |
转自:http://tieba.baidu.com/p/1326841218 |