Api 流行语言或库中最大的设计错误是什么?
对于我们每天使用的流行语言和库: 什么是一些糟糕的设计、令人尴尬的API或通常糟糕的可用性的例子?我们必须为设计错误付出代价,因为它们引入了微妙的错误,我们必须使用笨拙的变通方法或记住不直观的方法来完成事情 我特别考虑这样的问题:OO语言中有一个类不应该继承另一个类。有一个特殊的操作符使得某种语言很难解析,结果证明它是未使用的。一个命名错误的函数,或者经常用于它设计目的以外的其他用途(我想用Api 流行语言或库中最大的设计错误是什么?,api,programming-languages,Api,Programming Languages,对于我们每天使用的流行语言和库: 什么是一些糟糕的设计、令人尴尬的API或通常糟糕的可用性的例子?我们必须为设计错误付出代价,因为它们引入了微妙的错误,我们必须使用笨拙的变通方法或记住不直观的方法来完成事情 我特别考虑这样的问题:OO语言中有一个类不应该继承另一个类。有一个特殊的操作符使得某种语言很难解析,结果证明它是未使用的。一个命名错误的函数,或者经常用于它设计目的以外的其他用途(我想用std::getline来标记字符串) 我不是在寻找bash语言的贡献,也不是说Perl或其他语言的设计很
std::getline
来标记字符串)
我不是在寻找bash语言的贡献,也不是说Perl或其他语言的设计很糟糕。我更多的是寻找一些具体的例子或轶事,这些事情显然应该有所不同。(也许设计人员发现它太晚了,并试图在后续版本中修复它,但必须保持向后兼容性。)名为“NullPointerException”的Java类
从C++到java迁移,我总是觉得在java语言的URL类中(或是几年前)在确定URL对象的哈希代码时,发现一个语言中有一个Null PoExtExchange异常,它是“没有指针”< /P> < P> Java的URL类确实做了(或做了几年前)的DNS查找。因此,不仅URL作为键的哈希表速度非常慢,而且如果两个连续的DNS请求返回不同的值或者您拔掉网络电缆,它在运行时也会发生变化
跳到大约40分钟,他谈到了Java中的一些XMLAPI总的来说,这是一个非常有趣的演讲。我最喜欢的来自Smalltalk的世界。具体来说。在Squeak中,信号量类从LinkedList继承。信号量可以使用链表,但它们本身不是链表。这就形成了一个非常奇怪的界面。这是一个可怕的面向对象设计。 API,当函数返回空项时函数返回null,然后不记录何时、如何、或为什么返回空。 < P>大多数C++是设计缺陷,但大多数人都学会了用它来生存。[大量反对者投反对票的鸭子]我在Ruby的Dir.glob()中找到了一个 我还无法证明它与我的特定环境无关,因为我的环境很旧,而且是手工拼凑的,不幸的是,我需要继续支持它。似乎至少有5种情况:
- 目录中有文件和一些匹配->这些文件的列表
- 目录中有文件且无匹配->空列表
- 目录为空->无
- 目录存在,但当前用户无法读取它(不知道这里发生了什么)
- 目录丢失(也没有测试过)
它让我毛骨悚然,因为文档没有这样描述它。Java中的检查异常与未检查异常。大多数Java开发人员要么不知道何时使用哪个,要么,如果他们知道,他们不同意
然后我们有一些东西,比如
IOExeption
,当它们出现时,你永远无法处理它们,但必须扔掉它们(在所有意义上)。当您最终到达一个可以处理它们的地方时,您不知道如何找出可能导致它们的原因,因此您只能向用户提供消息和堆栈跟踪,并希望用户能够找到它(这里的“她”是知道Java是一种咖啡的普通用户)。PHP有很多这样的原因,例如($Pineder,$haystack)($haystack,$Pineder)不一致。
字符串函数的前缀为mb_uu,用于启用多字节支持。
我最喜欢的mysql\u escape\u字符串和mysql\u real\u escape\u字符串。。。
让我们不要开始OO部分…:)我个人最喜欢的是C标准库的atoi
int atoi ( const char * str );
- 成功时,函数将转换后的整数作为int值返回
- 如果无法执行有效转换,则返回零值
- 误导性的名称:日历对象被认为是“日历系统”的模型,但实际上它封装了一个时间对象,即它是一种日期(这本身就是一个问题,因为日期最好命名为DateTime或TimeStamp)
- Calendar只有一个具体的子类(GregorianCalendar),但抽象Calendar类包含的常量仅在这种特定情况下有用(一月、星期一、上午、下午、纪元)
- 您可以使用常量修改字段(“星期一”、“每月的星期”等);这些是整数,很容易混淆
- 事实上,几乎每个参数和返回值都是整数;基于0和1的数字通常会出现问题(1月是0还是1=
- 只有在使用AM/PM系统时才有意义的常数,如“HOUR”和“HOUR\u OF_DAY”(美国以外没有人理解;-)