最新评论
Re:4个程序员的一天 AlanWang 2011-09-16 15:20
@Anders Cui
[quote]Anders Cui:如果有人能看到这里<br/>建议您了解一下F# :-)[/quote]
我看到这里了,标记一下。
Re:4个程序员的一天 哲夫 2009-09-24 13:16
虽说java能做到的c#也能,但仅限于语言层面。当系统作为一个大型企业应用的基础架构时,.NET程序相比JVM程序更容易出问题,也更不易解决。这大概也解释了为什么.net 架构师要比java架构师收入高吧?
Re:4个程序员的一天 雨中滴 2009-08-30 16:41
喂喂 ,java的枚举呢 那不是更简单 还不用 interface。
有新东西不用,想什么呢
enum XXX{
add{
。。。
}
sub{
}
}
XXX.add.XXX(XXX,XXX)
XXX.sub.XXX(XXX,XXX)
re: 4个程序员的一天 lj6684 2008-12-26 10:21
顶一下吧,好文章,现在才看到,补充一种Groovy的
def caculate = { op, a, b ->
return evaluate(a + op + b)
}
re: 4个程序员的一天 winter-cn,我也不能总是不登录是吧 2008-12-17 18:48
前缀表达式是Schema的强项 不公平嘛
re: 4个程序员的一天 hideme 2008-12-17 15:34
很有意思的文章,各个程序员的使用的方法很到位
re: 4个程序员的一天 Anders Cui 2008-11-10 18:00
如果有人能看到这里
建议您了解一下F# :-)
re: 4个程序员的一天 rwxybh 2008-04-09 19:15
Boost库的functor完全可以媲美delegate
也是类型安全的
re: 4个程序员的一天 装配脑袋 2007-11-29 13:52
那段Java很好地体现了开闭原则,所以是相当有参考意义的。
不过时代真是前进的快了,如今再看这段代码,VB已经可以这样写了
Dim Foo = Function(op, a, b) op.Invoke(a, b)
Dim result1 = Foo(Function(x,y) x + y, 1, 2) ’加法
Dim result2 = Foo(Function(x,y) x - y, 1, 2) ’减法
Dim result3 = Foo(Function(x,y) x * y, 1, 2) ’乘法
Dim result4 = Foo(Function(x,y) x / y, 1, 2) ’除法
re: 4个程序员的一天 netwjx 2007-10-01 00:01
--引用--------------------------------------------------
sss: 上面的代码,其实代码臭味最重的就是那段java代码。
看似代码中消除了switch,其实把分支操作踢到用户那里去了。写了一段自以为是的代码,还以为很巧妙,其实根本是脱裤子放p。根本没有任何设计模式可以消除分支操作,除非本来就没有分支的需要,最多以一种更加麻烦的方式实现分支而已。
看看这段恶心的java代码,费了那么多事情,最后竟然没有完成任务。如果写出完整的调用代码,还是要用switch。
大家看看:
I操作符 我的加法 = new 加法();
OO_Calculator 我的加法器 = new OO_Calculator(我的加法);
double sum = 我的加法器.Foo(3, 4);
System.Console.WriteLine(sum);
怎么知道用户一定输入加法符号?要是四个一起写出来,还不是要用switch?
明明就是脱裤子放p,还自以为发现了什么巧妙的方法。
自以为聪明的笨蛋是笨蛋中最笨的一种。
自以为学会了设计模式的笨蛋是程序员中最笨的一种,比没学设计模式还要笨。
很多自以为会java就沾沾自喜的笨蛋,就属于这一类。
编程有两年经验,再学习任何编程语言都只需要两个星期。只会一种编程语言,竟然还沾沾自喜,无疑是废柴中的废柴,属于不可救药的一类极品废柴。
--------------------------------------------------------
此人
完全
没有
理解
上面 的 核心思想
很多设计方法,是可以将分支结构在运行时由用户的动作决定的,而并不在代码中使用if switch之类的,比如OO中方法的多态,调用方只管将参数传递过去,不考虑具体是哪个方法
这些设计方法 目的还是为了很灵活的解决问题 再以后需求变更时可以通过修改代码而不是重新设计的方法实现
使用FP的思想实现也还是很灵活的 而且 运行时 调用堆栈 貌似少一些
看到了Joel说软件的中文版, ....
翻译的太差了, 应该把译者拖出去打!
re: 4个程序员的一天 sekihin 2007-09-05 11:11
@Ninputer
VB.Net中有没有类似的解法,如何替代C#中的匿名方法啊?
re: n久以前写的火星文 。。。 2007-06-10 17:57
是fowler,谢谢。。
re: 4个程序员的一天[未登录] Andy 2007-05-18 10:09
高!!!
一个简单的小问题竟然写出了几种不同的编程模式, 可见作者功底确实不低!
PFPF!
re: 人格类型 测试结果 郝岩 2007-04-07 15:34
我比较喜欢蓝色。
re: 人格类型 测试结果 郝岩 2007-04-07 15:31
我是一个内向的人。
re: 4个程序员的一天 ShellEx 2007-02-28 20:40
Wow~我知道了
错误是因为传进去的+不是一个函数...
这样就行了
(define (Foo op x y)
(display (op x y)))
(foo (eval(read)) (read) (read))
re: 4个程序员的一天 ShellEx 2007-02-28 15:02
提出疑问:老板是这样要求的:
用户输入2个数,并输入一个操作符。你根据输入的情况来得出相应的运算结果
但是对于
(define (foo op x y)
(op x y))
(foo (read) (read) (read))
会出错的.
procedure application: expected procedure, given: -; arguments were: 4 3
使用的编译器是DrScheme.请问BZ是为何呢?
如果不能让用户输入,那么用C或者ErLang的宏也是可以的,它们只不过在编译时展开而已:
C:
#define FOO(op, x, y)(x op y)
ErLang:
-define(FOO(Op, X, Y), X Op Y).
re: 4个程序员的一天 ShellEx 2007-02-28 09:56
这真是一篇很酷的文章.
我转帖它于我的Blog好么
正确的做法是遇到2,3个以上相同的Switch-Case/If-Else-If-Else结构统一重构成类
如果只有1处就不需要
用oo就是为了简单和去除重复
不是为了用类取代简单明了的Switch-Case/If-Else-If-Else,让代码更复杂
re: 4个程序员的一天 辰 2006-11-26 16:08
@sss
把生成 : I操作符 我的加法 = new 加法();
这段代码交给用户,这样程序就漂亮了。
需求变为:输入4个代表算法的类 + 2个数字。
re: linkcd胡扯职业生涯规划(一): 关于定位 itwalker[匿名] 2006-11-25 02:11
业精于勤,荒于嬉;行成于思,毁于随。
多做实事多思考问题是对的。不过,如果从一个不正确的命题和假设出发,可能得到的结果也不一定正确。
“Fred team最后的利润是 收入30k - 开发费用20k – 维护0k = 最终利润10k.
Bob team最后的利润是 收入30k – 开发费用10k – 维护费用3k – 间接损失2k = 最终利润15k.”
这笔帐算得是有问题的,至少没有算完。是否考虑下面的情况?
单看一个项目,Fred team虽然利润低,但是项目保质保量完成,赢得用户信赖和口碑,又有用户推荐的用户找上门来,一年接手n个项目,利润是10k*n,公司业务蒸蒸日上。
单看一个项目,Bob team利润虽然高了些,但是项目做烂,遭到用户bs,公司牌子做砸,潜在的用户知道了前面的案例,都悄然引退,再无生意进帐,一年利润是15k+n*0,公司经营难以为继。
结论:市场上,从古到今,似乎还没有假冒伪劣能做成百年老店和金字招牌,不要用自己的假设低估了用户和老板以及市场。
re: Solution for SICP sicp 2006-11-03 00:58
Switch Case 的编译完目标代码的效率是最高的
re: [翻译]每个作者都应该懂的统计学 Part I Xiaoyi[匿名] 2006-09-27 06:01
急切盼望,下一课:Standard Deviation。
下载安装Microsoft Visual Studio .NET Help Integration Kit (VSHIK2003)。
thank you so much for giving me your suggests.
you too,wish you happy
Hi,
Im not sure about "文档工程师" but if u r working under .net, u can check Ndoc (but someone said NDoc is dead, check this link:
http://blog.joycode.com/percyboy/archive/2006/08/03/79494.aspx)
for java or other programing language, pls check google:
http://www.google.com/search?sourceid=navclient-ff&ie=UTF-8&rls=GGGL,GGGL:2006-21,GGGL:en&q=generate+document+
have a nice day.
您好
我想了解一下,产生帮助文档的工具软件有哪些啊?
请指教.刚接触文档工程师.想自学一点东西.
希望得到您的帮助.
QQ,342511087
MSN:blueru2005@msn.com
Well I have to disagree because this sort of design decisions should be left to the Solution Architect not to the runtime. To say that "All application built on the .net 2 framework should change the serialization mode of a dataset to XML on the fly to preserve backward compatibility" is a big assumption as every project is different.
For example if you are architecting a .net 2.0 n-tiers Distributed Application that remotes strongly typed dataset and you decided to explictly set the serialization to be Binary because of the performance gain, you don't want it to become XML behind your back do you? So it's all on a case per case basis. All I see here is a property that does not get de-serialized properly and I call that a bug. since I am at that there is another one (bug) that we discovered recently with that stuff.Beware it is quiet dangerous too and once Microsoft fixes it will potentially breaks many unaware applications. It involves serializing/deserializing datarows containg Datetime Columns that are non-valued (DBNull). If you set the new SerializationFormat property to Binary. and serialize it you will find that upon re-hydratation (Deserialization) the datetime value became (in our case) 01/01/0001 10:00am, YES YOU READ RIGHT! the DBNULL value became magically a non null value that looks real close to the real MinDate returned by a Datetime datatype but offset by 2Hours????? looks like someone forgot to handle dbnull correctly for Datetime in that all new binary serializer code from MS. Contat me if you want chat: OlivierB@smb-logic.com
呵呵,哥,我真喜欢你。。。为虾米老是可以找到那么多我喜欢的东东呢~在你这里
支持linkcd "No more Switch-Case/If-Else-If-Else statements"的观点,感谢lz拿出来和大家分享.但lz的实现方法确实有点复杂.
re: 一个不错的scheme入门PPT idior 2006-05-05 11:34
re: 一个不错的scheme入门PPT idior 2006-05-04 14:35
re: 4个程序员的一天 xiaoxin真麻烦 2006-04-27 10:52
感觉有点XP的风格,小弟使用的语言不多,也没经验。只能谈谈自己的体会,说到设计模式,我感觉基本上用不多,如果过多的应用设计模式反而使代码更复杂(也可能和自己没写过大程序有关)。好的设计和语言无关,语言只能为你解决某些问题提供方便。我很喜欢LISP语言(虽然没大用过),不过LISP语言中的一切皆函数的概念很好。无论是继承还是运算都是函数。使程序员不必费力去理解像模板,代理之类的东西。就像C#中一切都想对象一样,LISP语言追求的是所有概念的统一。在这方面LISP语言作到了极限。
@xsummer
哎呀,你一说才发现的确写错了。。。算了懒得改了就这样吧
至于我的例子,见仁见智了
@linkcd
royhoo应该是指你的回复,他可能不好意思直接指出你的笔误
其实总体来说,这里所有发言的人对代码的标准都是一致的:结构简单,易于维护。只不过你举的例子在别人看来是反例而已。所以我也同意你的观点,但不敢认同你的例子。
case 很清楚,
放上100个case也还是很清楚
@royhoo
首先,“越简单的才是越容易扩展的”这话我不同意。具体的issue可以扯一本书我也就不多说了,建议你去看ASD,里面那个“copy-paste”的例子你就可以看出简单的logic要腐化起来是多么的容易
第二,对于error message的处理,您可以自己去看uncle bob对此的回复
第三,对不起,请说明什么叫"华而不实"? 本文最初的原意也是给uncle bob看的,你能指望他看懂我用中文写的文章?
还有一点,你觉得用E文和大家交流比用中文会来得更清晰吗
去掉那些华而不实的东西吧
不要怪别人说你的设计复杂,相比之前的case语句,至少你的代码需要看UML图才能理解
越简单的才是越容易扩展的
当然,也许你的原意不是这样,但你举的这两个例子,确实是不合适,尤其是后面那个根据错误值来返回对应错误信息的例子,用case是最简洁易懂的
其实很多时候并没有绝对的好的设计和坏的设计,任意方法都有利有弊,主要就看怎么权衡了,你这里可能扩展性更好,但可读性的下降也是必须要考虑的问题
还是选择Binary DataSet Philer 2006-03-26 15:33
以上测试是基于理论的, 如果基于速度考虑, 选择Custom Class, 但如果速度性能查不不大的话, 大部分人在大部分情况下, 还是优先选择使用的方便性, 这样的话, 应该使用DataSet的人会多一些.
@ttyp
To be honest, i really do NOT think my solution is complex. So many comments said my code is to hard too understand, this really confused me.
不要为了设计而设计,这样的代码看上去很优雅,用到了很多复杂的技术,但是你的老板并不满意,因为本来一个低水平人能维护的代码,却非得让一个高水平的人来维护,增加了管理成本
如果不需要要扩展就可以使用swtich,例如swtich里面的case有1..12(代表有1月至12个月)。
但是有扩展的话,就应该使用接口和新增类(设计模式),这样的代码才是真正的艺术。
建议那些看不懂的还是 先从面向对象学起吧。
简洁实用才好
感觉linkcd的方法可读性降低许多,要别人来维护的话恐怕头疼一些
编码的艺术在于简洁而富有实用性
坑长的代码让人感觉反胃