`
bmqnc
  • 浏览: 127517 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于类库函数设计中的一点哲学

    博客分类:
  • java
阅读更多
在类库中很多函数设计很巧妙,至今我还在体会他们的设计哲学是怎么样的,比如关于LinkedList的,里面有一个函数:
public E getFirst() {
	if (size==0)
	    throw new NoSuchElementException();

	return header.next.element;
    }


返回第一个元素,如果之前我没看过这段代码的话,让我自己写的话,我可能会返回一个null值,但类库里是抛出一个异常。很多类库的函数(比如remove操作等)都是这样设计的。

仔细想想这样确实有道理。

因为返回null和抛出异常实际上两个是两种不同的含义,抛出异常说明的是做了不正确的操作,而返回null值只说明结果没取到,或值不确定。

但如果说不抛出异常,而用返回值null表示没有元素也是可以的。但我觉得这样可能比较别扭,因为这有点脱离本身这个函数的本意了(职责驱动设计?),并且如果用户对这个返回值没做检查就拿去用的话那就引起后续的麻烦(否则,api里还要告诉用户这里应该加上空值检查),那这样还不如在问题发生的早期就告诉用户已经发生了问题了。

这让我想起了断言式编程(防御性编程?),应该说类库的作者很无敌。。

不过后来有几个函数又让我很困惑,第一是peek和element函数都是取首元素,但为什么要做两个版本(仅仅是为了覆盖实现Deque中的这两个接口吗?),而且一个可能抛异常,而另一个确实返回null值。还有peekFirst。。。

删除方面有poll和remove()等,也同样是这个问题,晕啊。。。

分享到:
评论

相关推荐

    MFC类库详解

    在这个CHM版的"MFC类库详解"中,我们将深入探讨MFC的结构、风格、回调函数以及消息映射等核心概念。 首先,MFC的结构分为几个主要部分:核心库、应用框架、ActiveX控件支持、数据库访问和网络编程。核心库提供了...

    mfc类库详解不全

    C#与MFC在语法和设计哲学上有所不同,C#更倾向于简洁、类型安全和自动内存管理。 "Win32 API大全"这部分内容可能包含了Windows操作系统提供的大量原始函数和结构体,这些API是所有Windows程序的基石,无论是否使用...

    Microsoft基本类库应用程序框架

    3. **编写代码**:在ClassView中找到`CMyApp01View`类的`OnDraw()`成员函数,并添加一行代码用于显示文本。示例代码如下: ```cpp void CMyApp01View::OnDraw(CDC* pDC) { CMyApp01Doc* pDoc = GetDocument(); ...

    MingGeJS1.9.1类库加强完美版

    作为一个“山寨JQUERY”,它可能借鉴了jQuery的API设计,使得熟悉jQuery的开发者能够快速上手,同时也可能有自己独特的设计哲学和优化策略,以区别于原版jQuery。 在JavaScript类库中,像MingGeJS这样的工具通常会...

    MFC函数库手册

    1. **基础概念**:这部分介绍MFC的基本架构和设计哲学,包括类层次结构、消息处理机制以及文档/视图架构。MFC的核心类如CWinApp、CWnd、CDocument、CView等在这里会有详尽的解释。 2. **类库概述**:涵盖MFC中的...

    很实用的mfc开发技术,可方便的查询了解mfc类库

    学习和掌握MFC开发技术,你需要理解它的设计哲学,熟悉各个类的功能,以及如何利用消息映射和事件处理机制。同时,深入理解文档/视图架构对于开发复杂的Windows应用至关重要。此外,通过实践,如创建一个简单的MFC...

    visual c++6.0mfc类库参考手册第4章-第5章.rar

    在这一章中,首先会介绍MFC的基本概念,包括其设计哲学、类结构以及如何利用MFC来构建应用程序。MFC的核心是应用程序框架(Application Framework),它提供了一种组织和管理代码的方式,简化了Windows程序的开发。...

    PHP电子书, PEAR、PECL的应用,Smarty类库

    PHP的设计哲学是“代码即数据”,使得它非常适合处理动态内容。PHP提供了丰富的内置函数,用于处理各种任务,如字符串操作、数组处理、文件系统操作等。 **PEAR和PECL** PEAR...

    JAVA程序设计范例

    在"JAVA程序设计范例"中,可能会包含关于类的继承、封装和多态性的示例,这些都是面向对象编程的重要概念。 再者,Java支持多种控制结构,如条件语句(if-else)、循环(for, while, do-while)和异常处理(try-...

    Java程序设计:第1章 面向对象程序设计.ppt

    面向对象程序设计是现代软件开发中的核心思想,Java作为一门强类型、面向对象的语言,它的设计哲学深深植根于这一理念。本章主要探讨的是Java中的面向对象编程基础,包括对比面向对象与面向过程的区别、类与对象的...

    十分钟看懂Python

    这种设计哲学在Python的官方格言“The Zen of Python”中有所体现。 8. 扩展性:Python是可扩展的,支持程序员使用C、C++、Cython等语言编写扩展模块,这增强了Python的功能。 9. 执行方式:Python代码首先被编译...

    TDDOWNLOAD\Perl 与 Python 之间的一些异同

    Perl倡导的“多途径完成任务”与Python坚持的“最佳单一途径”哲学形成鲜明对比,这种差异也体现在两者的语法设计和社区文化中。 ### Perl与Python的基本数据类型对比 #### Perl - **标量(Scalar)**:用于存储...

    ViteLib:我在大多数项目中往往需要的 C++ 类库

    在本文中,我们将深入探讨 ViteLib 的核心功能、设计哲学以及如何在你的 C++ 项目中集成和使用它。 首先,让我们来看看 ViteLib 在 C++ 类库中的主要组件。由于具体的文件结构和内容未在提供的信息中列出,这里将...

    java课程设计 附带源程序

    Java课程设计是学习Java编程语言过程中的一项重要实践活动,旨在通过实际项目来巩固理论知识,提升编程技能。在这个压缩包中,包含的是一个完整的Java课程设计项目,附带了源程序,这对于初学者和有一定基础的学习者...

    DelphiCodeDict

    而"DelphiCodeDict"正是这样一个辅助工具,它可能包含了常见的Delphi关键字、类库函数、系统调用等的解释和示例,帮助开发者快速定位和学习所需知识。 在压缩包中,有两个关键文件:"CodeDict.exe"和"CodeDict.mdb...

    Qt最新官方API中文查考手册

    使用"Qt最新官方API中文查考手册",开发者不仅可以快速查找所需的信息,还能深入理解Qt的设计哲学和最佳实践。无论你是刚开始接触Qt,还是已经是经验丰富的开发者,这本手册都将是你不可或缺的参考资料。通过仔细...

    passwd

    "pass"和"passwd"可能是指与密码处理相关的功能,而"Unix wd风格"可能指的是类库遵循了Unix的工作方式或者设计哲学,比如简洁、模块化和可组合性。 压缩包内的文件列表: 1. "说明.htm":这可能是一个HTML格式的...

    《Python编程之美——带你进入Python语言世界》课程设计大纲.docx

    《Python编程之美——带你进入Python语言世界》课程设计大纲详细解析 这门课程旨在引导学习者进入Python的世界,体验其语法简洁、类库丰富的魅力。无论是对于有C/C++或Java背景的程序员,还是对系统维护人员,...

    VC++MFC资料全集大全

    学习VC++ MFC的过程中,你需要理解类库的设计哲学,熟悉Windows编程的基本概念,同时还要掌握C++的面向对象特性。通过阅读这些资料,你不仅可以学习到MFC的基本用法,还能提升解决实际问题的能力,为构建复杂的...

    kotlin2018年最新中文文档

    Kotlin的惯用法指的是在Kotlin编程中的一些约定俗成的编程风格或技巧,比如使用扩展函数来增强已有的类库功能,利用Lambda表达式来实现回调机制等。 编码规约部分则提供了编写高质量、可维护代码的建议,如使用有...

Global site tag (gtag.js) - Google Analytics