關於類庫函式設計中的一點哲學

2021-08-31 04:27:08 字數 690 閱讀 6321

在類庫中很多函式設計很巧妙,至今我還在體會他們的設計哲學是怎麼樣的,比如關於linkedlist的,裡面有乙個函式:

public e getfirst()

返回第乙個元素,如果之前我沒看過這段**的話,讓我自己寫的話,我可能會返回乙個null值,但類庫里是丟擲乙個異常。很多類庫的函式(比如remove操作等)都是這樣設計的。

仔細想想這樣確實有道理。

因為返回null和丟擲異常實際上兩個是兩種不同的含義,丟擲異常說明的是做了不正確的操作,而返回null值只說明結果沒取到,或值不確定。

但如果說不丟擲異常,而用返回值null表示沒有元素也是可以的。但我覺得這樣可能比較彆扭,因為這有點脫離本身這個函式的本意了(職責驅動設計?),並且如果使用者對這個返回值沒做檢查就拿去用的話那就引起後續的麻煩(否則,api裡還要告訴使用者這裡應該加上空值檢查),那這樣還不如在問題發生的早期就告訴使用者已經發生了問題了。

這讓我想起了斷言式程式設計(防禦性程式設計?),應該說類庫的作者很無敵。。

不過後來有幾個函式又讓我很困惑,第一是peek和element函式都是取首元素,但為什麼要做兩個版本(僅僅是為了覆蓋實現deque中的這兩個介面嗎?),而且乙個可能拋異常,而另乙個確實返回null值。還有peekfirst。。。

刪除方面有poll和remove()等,也同樣是這個問題,暈啊。。。

Python 關於類函式設計的一點總結

關於類函式設計的一點總結 by 授客qq 1033553122 usr bin env python encoding utf 8 author shouke import os class mytestclass def init self self.file list for dirpath 獲...

每天學一點庫函式10

本文中將會介紹memmove memset strpbrk strrev命令。其語法結構為。void memmove void dest,const void src,unsigned int count 功能均為由src所指記憶體區域複製count個位元組到dest所指記憶體區域。src和dest...

關於設計模式的一點感想

過去對於軟體當中復用的思想有概念,但卻沒有太深刻的體會,有時候在 裡面多處呼叫了同乙個函式,就認為這個就是軟體的復用了。甚至和別人一聊起 物件導向 來,也會說到 抽象 繼承 封裝 多型 設計模式 資料結構與演算法 等等名詞,但卻真的沒有一種內心的深刻體驗,也很少想什麼時候應該用 抽象 或 介面 多型...