小编Rya*_*chi的帖子

最喜欢的(聪明的)防守编程最佳实践

如果你必须为防御性编码选择你最喜欢的(聪明的)技术,它们会是什么?虽然我目前的语言是Java和Objective-C(有C++背景),但可以随意用任何语言回答.这里的重点是巧妙的防御技术,而不是我们这里70%以上的人已经知道的那些.所以现在是时候深入挖掘你的技巧了.

换句话说,试着想到除了这个无趣的例子之外:

  • if(5 == x) 而不是 if(x == 5):避免意外的分配

以下是一些有趣的最佳防御性编程实践的示例(特定于语言的示例在Java中):

- 锁定变量,直到您知道需要更改它们

也就是说,您可以声明所有变量,final直到您知道需要更改它为止,此时您可以删除final.一个常见的未知事实是这对方法参数也有效:

public void foo(final int arg) { /* Stuff Here */ }
Run Code Online (Sandbox Code Playgroud)

- 当发生不好的事情时,留下一丝证据

当你遇到异常时,你可以做很多事情:显然,记录它并执行一些清理会有一​​些.但是你也可以留下一些证据(比如将变量设置为"UNABLE TO LOAD FILE"等哨兵值,或者99999在调试器中有用,以防你碰巧超过异常catch块).

- 谈到一致性:魔鬼在细节中

与您正在使用的其他库一致.例如,在Java中,如果要创建一个提取一系列值的方法,则使下限包含且上限为exclusive.这将使其与String.substring(start, end)以相同方式操作的方法一致.您将在Sun JDK中找到所有这些类型的方法,因为它使各种操作包括元素的迭代与数组一致,其中索引从零(包括)到数组的长度(独占).

那么你最喜欢的防守做法是什么?

更新:如果您还没有,请随意加入.在选择正式答案之前,我有机会获得更多回复.

language-agnostic

148
推荐指数
28
解决办法
2万
查看次数

在Objective-C中将消息发送到nil

作为正在阅读Apple的Objective-C 2.0文档的Java开发人员:我想知道" 向nil发送消息 "意味着什么 - 更不用说它实际上有用了什么.摘自文档:

Cocoa中有几种模式可以利用这一事实.从消息返回到nil的值也可能是有效的:

  • 如果该方法返回一个对象,任何指针类型,任何大小小于或等于sizeof(void*),float,double,long double或long long的整数标量,则发送给nil的消息返回0 .
  • 如果该方法返回一个结构,如Mac OS X ABI函数调用指南所定义的那样在寄存器中返回,那么发送给nil的消息将为数据结构中的每个字段返回0.0.其他结构数据类型不会用零填充.
  • 如果该方法返回除上述值类型之外的任何内容,则发送到nil的消息的返回值是未定义的.

Java是否让我的大脑无法解释上面的解释?或者是否有一些我想念的东西会让它像玻璃一样清晰?

我确实在Objective-C中得到了消息/接收器的概念,我只是对接收器碰巧感到困惑nil.

objective-c

105
推荐指数
10
解决办法
5万
查看次数

关于性能和Java互操作性:Clojure与Scala

我已经阅读过Clojure与Scala的各种报道,而我发现两者都有自己的位置.有一些考虑因素我没有得到关于何时比较Clojure和Scala的完整解释:

1.)这两种语言中的哪一种通常更快?我意识到这会因语言功能而异,但对性能的一般评估会有所帮助.例如:我知道Python字典非常快.但作为一个整体,它是一个比Java慢语.我不想和Clojure一起走在路上遇到这个问题.

2.)与Java的互操作性如何?到目前为止我所读到的只是Scala具有本机集合类型,这使得与大型Java代码库集成有点笨拙,而Clojure遵循一种简单的以Iterable/Iterator为中心的方式来与Java类进行交互.还有更多想法/细节吗?

最终,如果它在clojure和scala之间足够接近,我可能会尝试它们.关于Clojure的一件事是语言看起来简单.但话说回来,Scala有一个非常灵活的类型系统.但是,我知道Scala很快(基于多个个人帐户).所以,如果Clojure明显变慢了:我想早点知道,而不是迟早.

java performance jvm scala clojure

82
推荐指数
6
解决办法
3万
查看次数

Java中的循环引用

给定一个以复杂,循环,方式相互引用的类实例的聚合:垃圾收集器是否可能无法释放这些对象?

我模糊地回忆起这在过去的JVM中是一个问题,但我认为这在几年前已得到解决.然而,在jhat的一些调查显示,循环引用是我现在面临的内存泄漏的原因.

注意:我一直认为JVM能够解析循环引用并从内存中释放这些"垃圾岛".但是,我提出这个问题只是为了看看是否有人发现任何例外情况.

java memory garbage-collection memory-leaks memory-management

48
推荐指数
3
解决办法
3万
查看次数

可可中的HashTables

散列表/包含HashMap是一个最(如果不是大部分存在的)有用的数据结构的.因此,在开始学习Cocoa编程时我研究的第一件事就是如何从哈希表中创建,填充和读取数据.

令我惊讶的是:我在Cocoa/Objective-C编程上阅读的所有文档似乎都没有解释这么多.作为一个使用"java.util"的Java开发人员,好像它是一个身体功能:我完全被这个困惑了.

所以,如果有人能够为我提供创建,填充和阅读哈希表内容的入门知识:我将非常感激.

macos cocoa hashtable objective-c

28
推荐指数
4
解决办法
3万
查看次数

在Google App Engine上使用Python NLTK(2.0b5)

我一直试图让NLTK(自然语言工具包)在Google App Engine上运行.我遵循的步骤是:

  1. 下载安装程序并运行它(一个.dmg文件,因为我正在使用Mac).
  2. 将nltk文件夹复制到python site-packages目录之外,并将其作为子文件夹放在我的项目文件夹中.
  3. 在包含nltk子文件夹的文件夹中创建一个python模块并添加以下行: from nltk.tokenize import *

不幸的是,在启动之后我得到了这个错误(请注意,这个错误在NLTK内部深处引发,我看到它用于我的python系统安装,而不是GAE项目的子文件夹中的那个):

 <type 'exceptions.ImportError'>: No module named nltk
Traceback (most recent call last):
  File "/base/data/home/apps/xxxx/1.335654715894946084/main.py", line 13, in <module>
    from lingua import reducer
  File "/base/data/home/apps/xxxx/1.335654715894946084/lingua/reducer.py", line 11, in <module>
    from nltk.tokenizer import *
  File "/base/data/home/apps/xxxx/1.335654715894946084/lingua/nltk/__init__.py", line 73, in <module>
    from internals import config_java
  File "/base/data/home/apps/xxxx/1.335654715894946084/lingua/nltk/internals.py", line 19, in <module>
    from nltk import __file__
Run Code Online (Sandbox Code Playgroud)

注意:这是上传到GAE时错误在日志中的显示方式.如果我在本地运行它我得到相同的错误(除了它似乎来自我的NLTK的网站包实例...所以没有区别)."xxxx"表示项目名称.

总结如下:

  • 我甚至想做什么?NLTK甚至可以在App Engine上运行吗?
  • 我错过了什么吗?那就是:将"nltk"复制到GAE项目是不够的?

编辑:修复拼写错误并删除不必要的步骤

python google-app-engine nlp nltk

17
推荐指数
2
解决办法
5753
查看次数

Clojure中的运算符重载

即使仔细查看Clojure上的文档,我也没有看到任何关于Clojure 是否支持运算符重载的直接确认.

如果确实如此,有人可以向我提供如何超载的快速信息,比方说,"+"运算符委托我们可以调用的一些预定义方法myPlus.

我对Clojure 新,所以非常感谢有人的帮助.

functional-programming operator-overloading clojure

16
推荐指数
2
解决办法
3061
查看次数

模型 - 视图 - 控制器是否面向对象设计不佳?

OOD(面向对象设计)和MVC(模型 - 视图 - 控制器)架构已成为现代软件设计的主要内容.然而,我最近就MVC架构如何利用(甚至可能违反)OOD原则进行了有趣的讨论.这种可能性实际上相当有趣,因为OOD和MVC都旨在实现许多相同的目标:关注点分离和软件可重用性.但我提出的问题:这两种设计策略是否与彼此直接冲突? 正如我在实践中使用过的那样,我开始思考:很可能是的.

我这样说是因为:在模型,视图和控制器之间实施严格的分离通常会产生这样的架构,其中模型被实现为只能通过外部控制器操纵的哑容器.我认为这直接冲突了面向对象设计的主要原则之一:对象包含执行必要操作的操作,并在必要时封装它们.例如,在纯粹的面向对象的体系结构中,假设的File类将包含诸如open()和的方法save().MVC表明,我们有两个班FileFileManager(使得后来包含open()save()方法).对我来说:MVC设计相当混乱.如果需要创建一个更专业的类型File(比如用于处理通过网络传输的文件open()或者save()),只需要File使用一个名为(比如说)的类的子类:StreamedFile.使用MVC,您必须创建另一个管理器类或使原始管理器类的设计复杂化.

由此,可以得出在一个更复杂的系统MVC可能对关注和代码的可重用性分离都带来灾难性的后果.或不?也许MVC模式可以在不破坏OOD原则的情况下实现?或者,MVC本质上是一种有缺陷的方法,难以实现松散耦合组件的软件系统?

language-agnostic oop model-view-controller design-patterns

16
推荐指数
2
解决办法
8730
查看次数

删除除""之外的所有空格字符

我认为自己对正则表达式非常好,但是这个看起来非常棘手:我想修剪所有空格,除了空格字符:' '.

在Java中,我尝试过的RegEx是:[\s-[ ]],但这个也脱掉了' '.

更新:

这是我试图从中删除空格的特定字符串:

project team                manage key

注意:它将是"团队"和"管理"之间的字符.编辑此帖子时它们显示为长空格,但在视图模式下查看为单个空格.

java regex

13
推荐指数
2
解决办法
8497
查看次数

Java Developer在Mac OS上符合Objective-C

我在很多年前用C++开发过,但是现在我主要是一名Java软件工程师.鉴于我拥有一部iPhone,我准备好在下个月开始使用MacBook,而且我对使用Mac OS开发(使用Objective C)感兴趣,我想我会把这个问题放在那里:下一步是什么?

更具体地说,我应该选择哪些书籍,是否有某些人可以指出的网络资源?我计划购买的一些书籍:

有谁熟悉这些头衔?最后,一旦我踏上这段旅程,我会非常感兴趣地总结一下我应该准备什么.作为使用IntelliJ IDEA在Java中开发的人,当我转向在Xcode中编写ObjectiveC代码时,我会注意到哪些关键差异?Mac OS桌面开发和iPhone开发之间有什么区别?习惯于Java垃圾收集,我应该了解ObjectiveC垃圾收集/内存管理.是否有人想指出的任何其他语言特定问题?如何构建UI?它是否更接近Swing,构建代码与之交互的Visual C++资源文件,还是更像是为guis生成代码的一些borland IDE?

c++ java macos cocoa objective-c

12
推荐指数
1
解决办法
3830
查看次数