Tag: 编码风格

使用Haskell状态monad的代码味道?

上帝我讨厌“代码味道”这个词,但我想不出更准确的东西。 在空闲时间,我正在devise一个高级语言和编译器,以便学习编译器构造,语言devise和函数式编程(编译器正在用Haskell编写)。 在编译器的代码生成阶段,我必须在遍历语法树时维护“状态”数据。 例如,编译stream程控制语句时,我需要为要跳转的标签生成唯一的名称(从传入,更新和返回的计数器生成的标签,并且计数器的旧值不能再次使用)。 另一个例子是当我在语法树中遇到内联string文字时,他们需要永久转换成堆variables(在空白string中最好存储在堆中)。 我目前正在包装整个代码生成模块在状态monad来处理这个。 我被告知编写一个编译器是一个非常适合于function范例的问题,但是我发现我的devise方式与C中的devise方式非常相似(你可以用任何语言编写C语言 – 甚至Haskell w /状态monads)。 我想学习如何在Haskell中思考(而不是在函数范式中) – 而不是在Haskell语法中使用C语言。 我应该真的试图消除/最小化使用状态monad,还是它是一个合法的function“devise模式”?

你如何使用Control.Applicative来编写更清洁的Haskell?

我写了一个最近对风格问题的回答 main = untilM (isCorrect 42) (read `liftM` getLine) 和 isCorrect num guess = case compare num guess of EQ -> putStrLn "You Win!" >> return True … Martijn有用地build议了替代scheme: main = untilM (isCorrect 42) (read <$> getLine) EQ -> True <$ putStrLn "You Win!" 通过使用Control.Applicative抽象,可以使Haskell代码中哪些常见模式变得更清晰? 记住有效使用Control.Applicative的有用的经验法则是什么?

Java构造函数风格:检查参数不为null

如果你有一个接受一些参数的类但是没有一个被允许为null那么最佳实践是什么? 以下是显而易见的,但是有一点不明确: public class SomeClass { public SomeClass(Object one, Object two) { if (one == null || two == null) { throw new IllegalArgumentException("Parameters can't be null"); } //… } } 这里的exception让你知道哪个参数是空的,但是构造函数现在很丑陋: public class SomeClass { public SomeClass(Object one, Object two) { if (one == null) { throw new IllegalArgumentException("one can't be null"); } if […]

如果“if”语句总是有一个“else”子句?

这可能是一个宗教论点,但是在我的工作中,这个争论是否所有的IF语句都应该包含一个ELSE子句,即使ELSE子句只包含一个注释,说明它被“故意留空”。 我已经听到双方的论点:“For”阵营 – 确保代码实际上解决了条件是否需要ELSE条款“反对”阵营代码难以阅读,增加了太多的噪音 我对任何其他观点都感兴趣,因为我必须以一个令双方满意的答案来解决这个辩论。 感谢您的帮助。 顺便说一句:我没有searchStackOverflow的答案,并无法find一个。 如果有的话,只是包括一个链接,并closures。 谢谢。

在评论中是否有“???”,“!!!”,“TODO”等标签?

我正在谈论评论开始时使用的特殊单词/标记,以便于评论或附加某些特殊含义,比如// TODO: Find out what to do about this error 。 一些标签的含义是明显的,如TODO和FIXME ,但是呢??? 和!!! ? 有其他人吗? 我问,因为我最近看到最近的两个,一些编辑,即Xcode,提供了一个简单的方法来find所有这些标签的评论。 如果没有这样的标准 ,我可以用描述任何公司本地政策的描述。 🙂 编辑 :参考实际文档的奖励积分。

我应该退还还是(无,无)?

我们有一个返回城市/状态元组的对象方法,即('Boston', 'MA') 。 在一些有效的情况下,没有有效的城市/国家可以返回。 在风格上,在这种情况下返回None还是包含(None, None)的两元素元组更合理?

包围返回值的括号

通常在ANSI C代码中,我可以看到圆括号包含单个返回值。 喜欢这个:- int foo(int x) { if (x) return (-1); else return (0); } 为什么在这些情况下使用()返回值呢? 有任何想法吗? 我看不出有什么理由。

摆脱丑陋的陈述

我有这个丑陋的代码: if ( v > 10 ) size = 6; if ( v > 22 ) size = 5; if ( v > 51 ) size = 4; if ( v > 68 ) size = 3; if ( v > 117 ) size = 2; if ( v > 145 ) size = 1; […]

我应该在哪里放置@Transactional注解:在接口定义还是在实现类?

来自代码标题的问题: @Transactional (readonly = true) public interface FooService { void doSmth (); } public class FooServiceImpl implements FooService { … } VS public interface FooService { void doSmth (); } @Transactional (readonly = true) public class FooServiceImpl implements FooService { … }

PEP 8,为什么在关键字参数或默认参数值的'='周围没有空格?

为什么PEP 8build议在关键字参数或默认参数值中不要有空格= ? 这与推荐在Python代码中每个其他出现的位置是否不一致? 怎么: func(1, 2, very_long_variable_name=another_very_long_variable_name) 比: func(1, 2, very_long_variable_name = another_very_long_variable_name) 任何链接到Python的BDFL讨论/解释将不胜感激。 记住,这个问题更多的是关于kwargs的缺省值,我刚刚使用了PEP 8的语句。 我不是在征求意见。 我在问这个决定背后的原因。 这更像是问我为什么要在C程序中使用{在同一行上,而不是我是否应该使用它。