我意识到这可能被认为是一个主观的或者是一个偏离主题的问题,所以我希望不要把它closures,否则会被迁移,也许会被程序员所接受。 我开始学习Haskell,主要是为了我自己的启发,我喜欢支持这种语言的很多想法和原则。 在和Lisp一起玩语言理论课之后,我开始对函数式语言着迷,而且我也听到很多关于Haskell的生产能力的好消息,所以我想我会自己调查一下。 到目前为止,我喜欢这种语言,除了我无法摆脱的一件事情:那些母亲正在执行function签名。 我的专业背景主要是做OO,特别是在Java。 我曾经工作过的大部分地方都有许多标准的现代教条。 敏捷,Clean Code,TDD等。经过这几年的工作,它已经成为我的舒适区; 特别是“好”的代码应该是自我logging的思想。 我已经习惯了在IDE中工作,在这个IDE中,具有非常具有描述性签名的冗长冗长的方法名称对于智能自动完成和用于导航程序包和符号的大量分析工具来说是不成问题的; 如果我可以在Eclipse中按Ctrl + Space,然后通过查看其名称和与其参数相关联的局部范围variables(而不是拉起JavaDocs)来推断出一种方法正在做什么,我就像一头猪一样快乐。 这肯定不是哈斯克尔社区最佳实践的一部分。 我已经阅读了很多关于这个问题的不同意见,我知道Haskell社区认为它的简洁性是一个“专业”。 我已经阅读了如何阅读Haskell ,我理解很多决定背后的原理,但这并不意味着我喜欢它们。 一个字母的variables名等等对我来说都不好玩。 我承认,如果我想继续使用这种语言,我必须习惯这一点。 但我无法克服function签名。 拿这个例子来说,从学习Haskell […]的函数语法部分: bmiTell :: (RealFloat a) => a -> a -> String bmiTell weight height | weight / height ^ 2 <= 18.5 = "You're underweight, you emo, you!" | weight / height ^ 2 […]
在跳入python之前,我已经开始使用一些Objective-C / Cocoa书籍。 我记得,大多数函数都需要明确声明关键字参数。 直到最近,我忘记了这一切,只是在Python中使用位置参数。 但是最近我遇到了一些由于不正当的位置而造成的一些错误 – 他们是那些偷偷摸摸的小东西。 让我思考 – 一般来说,除非有特别要求非关键字参数的情况 – 有什么好的理由不使用关键字参数? 总是使用它们被认为是不好的风格,即使是简单的function? 我觉得我的50行程序中的大部分已经定期扩展到500或更多行,如果我习惯于总是使用关键字参数,随着代码的增长,代码将变得更容易阅读和维护。 任何理由,这可能不是这样吗? 更新: 我所得到的一般印象是,它的风格偏好,有许多好的论点,一般不应该用于非常简单的论证,而是与其他风格保持一致。 在接受之前,我只想澄清一下 – 这种方法是否存在任何特定的非风格问题 – 例如,性能明显下降?
我(可能)没有提到“所有其他variables”,就像var1~. 这里。 我又一次被指向plyr ,看着mlply ,想知道为什么参数是用像这样的前导点来定义的: function (.data, .fun = NULL, …, .expand = TRUE, .progress = "none", .parallel = FALSE) { if (is.matrix(.data) & !is.list(.data)) .data <- .matrix_to_df(.data) f <- splat(.fun) alply(.data = .data, .margins = 1, .fun = f, …, .expand = .expand, .progress = .progress, .parallel = .parallel) } <environment: namespace:plyr> 那有什么用? 这只是个人喜好,命名规则还是更多? […]
这种方法: boolean containsSmiley(String s) { if (s == null) { return false; } else { return s.contains(":)"); } } 可以等效写成: boolean containsSmiley(String s) { if (s == null) { return false; } return s.contains(":)"); } 根据我的经验,第二种forms更常见,特别是在更复杂的方法中(可能有几个这样的出口点),“扔”和“回”也是如此。 然而,第一种forms可以使得代码的条件结构更加明确。 有没有什么理由相互比较? (相关: 一个函数是否只有一个返回语句? )
我在想:他们说如果你手动调用析构函数 – 你做错了什么。 但是情况总是如此吗? 有任何反驳吗? 情况需要手动调用,哪里难以避免?不可能/不可行/不切实际。
我已经看到了很多不同的样式(和几个不同的方法)在jQuery中创build元素。 我对build造它们最明确的方法感到好奇,也因为任何原因客观上比其他方法更好。 下面是我见过的样式和方法的一些例子 。 var title = "Title"; var content = "Lorem ipsum"; // escaping endlines for a multi-line string // (aligning the slashes is marginally prettier but can add a lot of whitespace) var $element1 = $("\ <div><h1>" + title + "</h1>\ <div class='content'> \ " + content + " \ </div> \ </div> […]
我正在查看一些C ++代码,用于我正在使用的硬件接口,并注意到大量的语句如下: if ( NULL == pMsg ) return rv; 我敢肯定,我听到有人说,把恒定放在首位是个好主意,但为什么呢? 是不是这样,如果你有一个大的声明,你可以很快看到你在比较什么,或者有更多的?
在Python中使用exception链是否有一个标准的方法? 像Javaexception'造成'? 这是一些背景。 我有一个主要exception类DSError模块: class DSError(Exception): pass 在这个模块的某个地方会有: try: v = my_dict[k] something(v) except KeyError as e: raise DSError("no key %s found for %s" % (k, self)) except ValueError as e: raise DSError("Bad Value %s found for %s" % (v, self)) except DSError as e: raise DSError("%s raised in %s" % (e, self)) 基本上这个片段应该只抛出DSError,告诉我发生了什么,为什么。 事情是,try块可能会抛出很多其他exception,所以我宁愿如果我可以做这样的事情: […]
我一直在C#中编程一段时间,现在我想刷新我的C ++技能。 有课: class Foo { const std::string& name_; … }; 什么是最好的办法(我只想允许读取访问name_字段): 使用getter方法: inline const std::string& name() const { return name_; } inline const std::string& name() const { return name_; } 使这个领域是公开的,因为它是一个常量 谢谢。
我是一个相当新手的C ++程序员,但是在我对语言有限的经验上,大多数标准的C ++风格指南(例如Google C ++风格指南 )都违背了stl和boost库中的实现。 例如,C ++标准库和Boost中的类名总是小写的,下划线用于分隔单词(例如std::vector , boost::unordered_map , std::map::const_iterator ),而我见过的大多数风格指南对于C ++倾向于CamelCase风格(例如TcpConnection或Int32 )。 这同样适用于方法。 标准库和Boost对类和方法使用相同的样式(例如std::map<>::get_equal("foo") ),而大多数样式指南主张使用pascalCase或CamelCase。 如果我们将它与Ruby这样的语言进行对比,那么大多数用户将遵循核心库中使用的约定,似乎很奇怪,标准C ++库和其他人的代码之间会有这样的区别。 有人知道为什么吗? 编辑:只是为了澄清,我只是谈论肤浅的文本风格(套pipe,使用下划线等),而不是实际的实施风格。