首页   注册   登录
ONLINE

guyeu

V2EX 第 274780 号会员,加入于 2017-12-15 17:26:21 +08:00
今日活跃度排名 771
guyeu 最近回复了
不能点反对+没有帮助。。
22 天前
回复了 D0NG 创建的主题 Java 后端处理富文本数据
图片和视频只处理索引。
22 天前
回复了 Simle100 创建的主题 Java 方式 1 和方式 2 的却别到底在哪里?
@wysnylc #33 同意你的大部分内容,但是绝对不同意应该用异常来实现逻辑。
比如 b/a 这个场景,不要傻乎乎得直接除+捕捉除 0 异常,应该检查传入参数,
if (a == 0) throw new IllegalArguementsException("a cannot be zero.");

滥用异常来实现逻辑一方面大量的异常会造成效率损失,另一方面 try catch 块的确会侵入正常逻辑造成可读性变差。
另外,大多数开发者的能力并不足以驾驭实现这样的异常处理逻辑,所以,防御式编程,在发现问题之后抛出异常,但是不要制造问题。
24 天前
回复了 Simle100 创建的主题 Java 方式 1 和方式 2 的却别到底在哪里?
@wysnylc #28
@sunznx #30
爬了一下楼,二位想必是知道捕捉异常比条件判断慢的,的确是慢在了收集堆栈信息上,或许可以通过重写 Exception 父类的内容来避免,但是更合理的当然是使用条件判断而不是处理异常。
这个慢是数量级的慢,“只差几毫秒”?无数计算机科学家绞尽脑汁,无数材料化学家物理学家费尽心血,让现在的 CPU 可以在毫秒级里执行几百万次这样的逻辑,不是给你这种睿智这么浪费的。

异常就是异常,它代表程序的错误,而不是逻辑的一部分,不要用异常来实现逻辑。
24 天前
回复了 Simle100 创建的主题 Java 方式 1 和方式 2 的却别到底在哪里?
@wysnylc #22
@felixlong #25
用异常来实现逻辑毫无疑问是错的,我写了一个小例子,异常比条件判断慢 100 倍以上:

```java
public static void main(String[] args) {
long cur = System.currentTimeMillis();
final int LOOP = 100_000;
for (int i = 0; i < LOOP; i++) {
try {
int b = 0;
int a = i / b;
} catch (ArithmeticException ignored) { }
}
long cost = System.currentTimeMillis() - cur;
System.out.println("cost1: " + cost);

cur = System.currentTimeMillis();
for (int i = 0; i < LOOP; i++) {
int b = 0;
int a;
if (b != 0) {
a = i / b;
}
}
cost = System.currentTimeMillis() - cur;
System.out.println("cost2: " + cost);
}
```

输出如下:

```
cost1: 1199
cost2: 4
```
24 天前
回复了 wysnylc 创建的主题 Java 为什么不建议用 try catch?
@wysnylc #4
@zunceng #8
java 的异常设计优势是让程序的各种无法预期的错误可以不影响代码结构,这一点比楼主提的 2 和 3 都好。go 的设计也是为了这个目标,但是实现得很愚蠢,java 里可以很容易得把异常抛给上层去处理。
Wrap 和 Unwrap 其实很大程度上是 java 的 Cause by 和 Supressed 的翻版。
就现在而言,个人认为 java 的这个异常方案可以说是最接近最优解的了,然而无论在哪里,处理异常只要把握住以下两点就可以了:
1. 不要丢失信息,包括异常树和异常堆栈;
2. 简洁,不要侵犯正常逻辑。
24 天前
回复了 wysnylc 创建的主题 Java 为什么不建议用 try catch?
了解一下 go 语言
result, error := func()
if error != nil {
...
}
38 天前
回复了 andyou 创建的主题 Python how to break boss 的 cookies ??? a spider
do not understand
English is too hard to me
42 天前
回复了 chinesehuazhou 创建的主题 Python Python 中如何实现自动导入缺失的库?
这种操作带来的问题绝对比解决的问题多
关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2068 人在线   最高记录 5043   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.3 · 10ms · UTC 16:08 · PVG 00:08 · LAX 08:08 · JFK 11:08
♥ Do have faith in what you're doing.