【分享】让人抓狂的代码,你们写过没,我是第一个经常中招 本帖最后由 bkq421511585 于 2012-11-02 13:07:00 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 if (someBoolean === true) { doSomething();}在javascript倒是必要的 我觉得也挺好呀,哪些是重点要考虑的参数.一看就明白。好好学一下汇编语言。搞清楚release与debug版的区别。这种低端的优化。编译器都能帮你搞定。你还是专注于业务逻辑几个jump指令而已,保证release出来的代码,你反编译之后都搞不清楚条件情况了有时命名不太规范多个条件进行比较的时候,这样写还是可取的var age17 = c == 17;特别这种条件一序列下来的时候,你中间突兀一个 age17,我相信你也会采用这种写法因为人的思维摆在这里。if(a== 14&& b == 15 && age17 == true && d == false){}当然这种写法是不错,至少你命名要规范,有意义if(CanA && IsB && IsC && !CanD){ do..}如果命名不规范,如这样的代码你也要去查找变量定义吧if(why??false && ! what??true && where)你说哪个好读,哪个好懂,有没有必要加上去呢当然我也喜欢看这样的代码dataGrid1.Visible = source.Count > 0;有时加上一段中间变量未必就是不优化如这样的代码 var t = (IDictionary<string, object>)total; var cur =(int)t[key]; r = ((double)cur/(double)totalpersonal).ToString("P");而这样写就是错的r =((double)((IDictionary<string, object>)total[key])/(double)totalpersonal).ToString("P");特别是t[key]为int时,计算时强制转为double,当其中容器中取出时还得是int型 脑残代码总比假高手的代码好,毕竟我们看得懂前者,请看假高手的代码:return a > 9 ? b > 7 ? "A" : b < 0 ? "B" : "C" : c == 5 ? "E" : "F"; if (result <= 10) { handling();}else if (result > 10) { otherHandling();}else { handling(); // to be sure}你这个代码写的不是脑残吗?一个<=10 了 ,其他的只有 >10你直接这么写if(result <=10){}else{}就完事了 if (result <= 10) { handling();}else if (result > 10) { otherHandling();}else { handling(); // to be sure}这个有点过了哈。就两种可能的撒。 如果写成switch结构会很好理解的,只是高手都这么写,实在是让人难以理解,当个考试题还差不多,实际中还是得尽量少写这种代码。 if (result <= 10) { handling(); } else if (result > 10) { otherHandling(); } else { handling(); // to be sure } 估计原先是 》 = 《 三种情况 if (someBoolean == true) { doSomething(); } 如果someBoolean声明为bool则没必要否则个人认为没什么问题 1.if (someBoolean == true) { doSomething();}假设,someBoolean 未指定类型,这个判断比较有必要,==true 并不是什么坏事, 反而我觉得==true 看着比较爽.2.if (result == true) return true;else return result;同1,当然不推荐object 做返回3.if (result <= 10) { handling();}else if (result > 10) { otherHandling();}else { handling(); // to be sure}这个比较好玩,如果result为可空类型,也是符合逻辑的.4.function DocumentDotWrite(s){ document.write(s);}这个没有什么错误的..编程习惯并没什么教条主义.主要你想,怎么写都可以. 呵呵,被照片吸引过来了。hoho本人也不喜欢重复啰嗦的代码,但是呢有些时候又必须考虑到多方面又方便的调用。 来个更脑残的代码 if (result1 == true && result2 == true) return true; else if (result1 == true && result2 == false) return false; else if (result1 == false && result2 == true) return false; else if (result1 == false && result2 == false) return false; else return false; 经常这样写...1.第一个没有什么影响,对于可读性和执行效率都没有影响。bool test = false;if (test == false) { }.method private hidebysig static void Main(string[] args) cil managed{ .entrypoint // コード サイズ 11 (0xb) .maxstack 1 .locals init ([0] bool test, [1] bool CS$4$0000) IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 IL_0003: ldloc.0 IL_0004: stloc.1 IL_0005: ldloc.1 IL_0006: brtrue.s IL_000a IL_0008: nop IL_0009: nop IL_000a: ret} // end of method Program::Main bool test2 = false; if (test2) { }.method private hidebysig static void Main(string[] args) cil managed{ .entrypoint // コード サイズ 14 (0xe) .maxstack 2 .locals init ([0] bool test2, [1] bool CS$4$0000) IL_0000: nop IL_0001: ldc.i4.0 IL_0002: stloc.0 IL_0003: ldloc.0 IL_0004: ldc.i4.0 IL_0005: ceq IL_0007: stloc.1 IL_0008: ldloc.1 IL_0009: brtrue.s IL_000d IL_000b: nop IL_000c: nop IL_000d: ret} // end of method Program::Main以上是c#和生成il的对照,生成时如果没有选择优化代码,if(test)的形式反倒多了两步的处理2.最后一个看看.net框架的代码就知道微软才是始作俑者 第一个和第四个的写法完全没问题, 第四个也许是为了方便改变document.write的行为,比如function DocumentDotWrite(s){ document.write("<div>" + s + "</div>");} 这样理解么...return a > 9 ? (b > 7 ? "A" :( b < 0 ? "B" : "C")) :( c == 5 ? "E" : "F"); 我也发个脑残代码:Request.QueryString["uid"].toString(); 推荐有此行为的人多看看《.NET设计规范》 if (result <= 10) { handling();}else if (result > 10) { otherHandling();}else { handling(); // to be sure}这是一种好的做法,这样如果第一个if满足了,就不用判断后面的了,如果douyongif就得多判断几次,这样让人逻辑上以为这些条件能同时发生 不一定吧,result 是 int?类型呢 a大于9同时 b大于7 返回字符串A,如果b小于0返回 字符串B,如果b大于等于0同时b小于等于7返回字符串Ca小于等于9时同时c等于5时返回字符串E,如果不等于5返回字符串F结果就是A,B,C,E,F四中情况中一种 那你们有没有碰到过新手,明明一个 select sum(money)的SQL语句能解决的求和问题,他要在后台把money一个个取出来,然后相加!!!!! 这样写有可能会抛也异常,当url参数中不带uid的话,Request.QueryString["uid"]为null。null不会ToString(); 在ToString()之前先判断是否为空,不为空再ToString() 伪静态页面有利于搜索引擎收录吗? 虚拟目录需要验证访问,如何配置某个ASPX页面匿名访问? 我在网上下载了.r.a.d.tabstrip试用出现下面问题.(在线等) 无解 免费20MASP/ASP。NET免费空间申请 http://edzh.com 为什么我的配文件不能访问?急,在线等 ASP.NET SQL语句问题 datalist 嵌套中触发编辑按钮后怎么绑定数据源? 我是一只菜菜菜菜鸟! 这可真是个问题! Web项目调试无错,发布后本地IIS访问出现问题 lhgdialog弹出两层页面
doSomething();
}在javascript倒是必要的
一看就明白。好好学一下汇编语言。搞清楚release与debug版的区别。
这种低端的优化。编译器都能帮你搞定。你还是专注于业务逻辑
几个jump指令而已,保证release出来的代码,你反编译之后都搞不清楚条件情况了有时命名不太规范
多个条件进行比较的时候,这样写还是可取的var age17 = c == 17;特别这种条件一序列下来的时候,你中间突兀一个 age17,我相信你也会采用这种写法
因为人的思维摆在这里。
if(a== 14&& b == 15 && age17 == true && d == false)
{}
当然这种写法是不错,至少你命名要规范,有意义
if(CanA && IsB && IsC && !CanD)
{
do..
}
如果命名不规范,如这样的代码
你也要去查找变量定义吧
if(why??false && ! what??true && where)你说哪个好读,哪个好懂,有没有必要加上去呢当然我也喜欢看这样的代码
dataGrid1.Visible = source.Count > 0;
有时加上一段中间变量未必就是不优化
如这样的代码 var t = (IDictionary<string, object>)total;
var cur =(int)t[key];
r = ((double)cur/(double)totalpersonal).ToString("P");而这样写就是错的r =((double)((IDictionary<string, object>)total[key])/(double)totalpersonal).ToString("P");特别是t[key]为int时,计算时强制转为double,当其中容器中取出时还得是int型
return a > 9 ? b > 7 ? "A" : b < 0 ? "B" : "C" : c == 5 ? "E" : "F";
handling();
}
else if (result > 10) {
otherHandling();
}
else {
handling(); // to be sure
}你这个代码写的不是脑残吗?
一个<=10 了 ,其他的只有 >10
你直接这么写if(result <=10)
{}
else
{}就完事了
handling();
}
else if (result > 10) {
otherHandling();
}
else {
handling(); // to be sure
}
这个有点过了哈。就两种可能的撒。
估计原先是 》 = 《 三种情况
如果someBoolean声明为bool则没必要
否则个人认为没什么问题
if (someBoolean == true) {
doSomething();
}
假设,someBoolean 未指定类型,这个判断比较有必要,==true 并不是什么坏事, 反而我觉得==true 看着比较爽.2.
if (result == true)
return true;
else
return result;同1,当然不推荐object 做返回3.
if (result <= 10) {
handling();
}
else if (result > 10) {
otherHandling();
}
else {
handling(); // to be sure
}
这个比较好玩,如果result为可空类型,也是符合逻辑的.4.
function DocumentDotWrite(s){
document.write(s);
}
这个没有什么错误的..编程习惯并没什么教条主义.主要你想,怎么写都可以.
呵呵,被照片吸引过来了。hoho
本人也不喜欢重复啰嗦的代码,但是呢有些时候又必须考虑到多方面又方便的调用。
if (result1 == true && result2 == true)
return true;
else if (result1 == true && result2 == false)
return false;
else if (result1 == false && result2 == true)
return false;
else if (result1 == false && result2 == false)
return false;
else return false;
if (test == false)
{ }
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// コード サイズ 11 (0xb)
.maxstack 1
.locals init ([0] bool test,
[1] bool CS$4$0000)
IL_0000: nop
IL_0001: ldc.i4.0
IL_0002: stloc.0
IL_0003: ldloc.0
IL_0004: stloc.1
IL_0005: ldloc.1
IL_0006: brtrue.s IL_000a
IL_0008: nop
IL_0009: nop
IL_000a: ret
} // end of method Program::Main bool test2 = false;
if (test2)
{ }
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// コード サイズ 14 (0xe)
.maxstack 2
.locals init ([0] bool test2,
[1] bool CS$4$0000)
IL_0000: nop
IL_0001: ldc.i4.0
IL_0002: stloc.0
IL_0003: ldloc.0
IL_0004: ldc.i4.0
IL_0005: ceq
IL_0007: stloc.1
IL_0008: ldloc.1
IL_0009: brtrue.s IL_000d
IL_000b: nop
IL_000c: nop
IL_000d: ret
} // end of method Program::Main
以上是c#和生成il的对照,生成时如果没有选择优化代码,if(test)的形式反倒多了两步的处理2.最后一个看看.net框架的代码就知道微软才是始作俑者
document.write("<div>" + s + "</div>");
}
return a > 9 ? (b > 7 ? "A" :( b < 0 ? "B" : "C")) :( c == 5 ? "E" : "F");
handling();
}
else if (result > 10) {
otherHandling();
}
else {
handling(); // to be sure
}这是一种好的做法,这样如果第一个if满足了,就不用判断后面的了,如果douyongif就得多判断几次,这样让人逻辑上以为这些条件能同时发生
不一定吧,result 是 int?类型呢
a大于9同时 b大于7 返回字符串A,如果b小于0返回 字符串B,如果b大于等于0同时b小于等于7返回字符串C
a小于等于9时同时c等于5时返回字符串E,如果不等于5返回字符串F
结果就是A,B,C,E,F四中情况中一种
null不会ToString();