2704. To Be Or Not To Be

閱讀時間約 6 分鐘

問題

Write a function expect that helps developers test their code. It should take in any value val and return an object with the following two functions.

  • toBe(val) accepts another value and returns true if the two values === each other. If they are not equal, it should throw an error "Not Equal".
  • notToBe(val) accepts another value and returns true if the two values !== each other. If they are equal, it should throw an error "Equal".

 

Example 1:

Input: func = () => expect(5).toBe(5)
Output: {"value": true}
Explanation: 5 === 5 so this expression returns true.

Example 2:

Input: func = () => expect(5).toBe(null)
Output: {"error": "Not Equal"}
Explanation: 5 !== null so this expression throw the error "Not Equal".

Example 3:

Input: func = () => expect(5).notToBe(null)

Output: {"value": true}

Explanation: 5 !== null so this expression returns true.


解題思路

  1. 需要有一個 function,裡面有兩個小物件,兩個物件又要包含兩個 function toBe 跟 .notToBe
  2. toBe 是當兩個值嚴格相等的時候,返回 true ,否則返回一個錯誤 "Not Equal"
  3. notToBe 則是當兩個值不相等時,返回true如果兩個相等 則回傳錯誤 "Equal"

所以我們的第一步要先建立一個 function

function expect(value) {}

接著我們需要她回傳兩個不同的物件 toBe​ ​跟 notToBe,裡面要包含用以判斷是否相等(或不相等)的funtion,我們先來解決 tobe 的部分。

從範例上可以看到以下兩點

  • expect(5).toBe(5) 要輸出 {"value": true}
function expect(value) {
return {
toBe:function (expect) {
if (value === expected) {
return true; }
}
  • expect(5).toBe(null)要輸出{"error": "Not Equal"}

回傳錯誤的時候,我們要用 throw Error 這個語法

function expect(value) {
return {
toBe:function (expected) {
if (value === expected) {
return true;
}
throw Error('Not Equal');
},

​再來處理 notToBe 我們也如法泡製一次:

function expect(value) {
return {
toBe:function (expected) {
if (value === expected) {
return true;
}
throw Error('Not Equal');
},
notToBe:function (unexpected) {
if (value !== unexpected) {
return true;
}
throw Error('Equal');
}
};
}

接下來我們測試一下是否正確

raw-image

完成!

但其實,上面這個寫法是很醜的,我們仔細看一下題目 notToBe(val) 的部分:

notToBe(val) accepts another value and returns true if the two values !== each other. If they are equal, it should throw an error "Equal".

注意到了嗎,這題的錯誤是產生在他們相等的時候回傳的,但是在我們的 notToBe 裡,我們卻是在他不是 不是不相等的時候,才回傳這個錯誤,相對之下會比較不好讀。

notToBe:function (unexpected) {
if (value !== unexpected) {
return true;
}
throw Error('Equal');
}
};

所以我們改個寫法,變成「當他們相等的時候,直接回傳錯誤」

notToBe:function (unexpected) {
if (value === unexpected) {
throw Error('Equal')
}
return true;

為了讓程式看起來"對稱",我們也把 toBe ​修改一下:

function expect(value) {
return {
toBe:function (expected) {
if (value !== expected) {
throw Error('Not Equal');
}
return true;
},


    0會員
    3Content count
    留言0
    查看全部
    發表第一個留言支持創作者!
    你可能也想看
    Thumbnail
    重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
    Thumbnail
    近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
    Thumbnail
    傷了三年,調整體質 檢視一下漲很多的觀光股 有些是真的營收變好嗎? 如下圖,國賓近期營收算是普通,2020年到2022年的本業營業利益為負數,2022年主要是靠賣高雄國賓的股權,使得業外有一筆可觀的收入。 因為疫情的關係,國賓也是營收傷很大,營業利益均為負數,暫時靠業外獲利貼補一下;老飯店吸引力比較
    Thumbnail
    本文將帶您了解最近一週(03/27-04/02)的美股時事,包含市場概況、美股動態和下週關注等方面,讓您能掌握最新的投資資訊。
    Thumbnail
    近日最重大消息是,台灣從基隆一路到高雄、台東發現十六具無名屍,初估只發現五名台灣人、兩名越南籍。根據最新報導指出,檢警在一具浮屍身上,找到一張台商的名片,並透過上面資訊順利聯絡上該名台商,並在台商的協助下,聯繫上其中一位死者家屬。經家屬透露,死者是為了偷渡來台灣,所以才登上漁船......
    這陣子學習網路行銷的小小感覺 感覺就是…每天都要做一樣的事情 雖說網路行銷聽起來應該很有趣吧(至少在我學之前,印象是這樣的XD 結果這陣子這樣下來,總覺得在外行眼中看起來很有趣 但是真的做起來,就是每天的To do list每天執行同樣的事情 就很無聊~   像是經營部落格 每天要想著今天要分享什麼
    Thumbnail
    最近趁著歐洲折扣驚喜購入Bottega Veneta這雙後繫帶鞋。乍看是百貨公司B1很常見的款式,不過細節的處理看得出特色,比方楦頭,恰到好處的比例讓寬腳板可以安心穿上又不失精緻形象,而雲朵般的皺摺繫帶也正好呼應了BV近期主打的pouch包款。整體設計搭配偏灰裸色加倍實穿,工作、休閒都很可以。
         前幾天廣州朋友J在IG上發佈他即將在九月份舉行的婚前派對,淡雅的水藍色海報上,印著她和她未婚夫的英文名,搭配上日文的「披露パーティー」以及中文的「派對」,很是J一貫的風格,簡約大方的設計襯托出主題但也不失巧思。
    嘿 不知不覺你就要滿29歲,正式來到20代的尾巴了!我想說的是這段時間謝謝你,陪我度過了多姿多采的20代。
     猫猫, 虽然我俩素未谋面,我也不知道你是男的女的.也可能是同志,但以我那副屌相来说,不合同志们的胃口,不够帅也不够中性.所以我估计你是一位漂亮的大美女. 在这一年不到的时间里面,我感受到你对我的情义,你对我的教训,像老师一样对我当头棒喝,恨瓦不成钢.你对我的爱与恨,我都照单全收,你的留言我都会细细
    Thumbnail
    完整標題:To be or not to be. That is a question. -- 試譯語出莎士比亞的劇作《哈姆雷特》(Hamlet -- Prince of Denmarke,創作於公元 1599 年 ~ 公元 1602 年期間) 中的這一小段台詞
    Thumbnail
    950327﹙一﹚ 考:國、英、數、地、史 珣:基本上,段考或模擬考的前一個晚上,我都會早一點睡,這樣考試時才會比較有精神。我記得之前的某個星期五我弄到一點才睡,結果隔天整天頭腦空白。 導師:說的是!作息要有規律才好! 爸爸:今天晚上,三樓絃歌不輟,珣和弟弟一會兒彈琴,一會兒吹笛,歌劇魅影和火影忍者
    Thumbnail
    重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
    Thumbnail
    近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
    Thumbnail
    傷了三年,調整體質 檢視一下漲很多的觀光股 有些是真的營收變好嗎? 如下圖,國賓近期營收算是普通,2020年到2022年的本業營業利益為負數,2022年主要是靠賣高雄國賓的股權,使得業外有一筆可觀的收入。 因為疫情的關係,國賓也是營收傷很大,營業利益均為負數,暫時靠業外獲利貼補一下;老飯店吸引力比較
    Thumbnail
    本文將帶您了解最近一週(03/27-04/02)的美股時事,包含市場概況、美股動態和下週關注等方面,讓您能掌握最新的投資資訊。
    Thumbnail
    近日最重大消息是,台灣從基隆一路到高雄、台東發現十六具無名屍,初估只發現五名台灣人、兩名越南籍。根據最新報導指出,檢警在一具浮屍身上,找到一張台商的名片,並透過上面資訊順利聯絡上該名台商,並在台商的協助下,聯繫上其中一位死者家屬。經家屬透露,死者是為了偷渡來台灣,所以才登上漁船......
    這陣子學習網路行銷的小小感覺 感覺就是…每天都要做一樣的事情 雖說網路行銷聽起來應該很有趣吧(至少在我學之前,印象是這樣的XD 結果這陣子這樣下來,總覺得在外行眼中看起來很有趣 但是真的做起來,就是每天的To do list每天執行同樣的事情 就很無聊~   像是經營部落格 每天要想著今天要分享什麼
    Thumbnail
    最近趁著歐洲折扣驚喜購入Bottega Veneta這雙後繫帶鞋。乍看是百貨公司B1很常見的款式,不過細節的處理看得出特色,比方楦頭,恰到好處的比例讓寬腳板可以安心穿上又不失精緻形象,而雲朵般的皺摺繫帶也正好呼應了BV近期主打的pouch包款。整體設計搭配偏灰裸色加倍實穿,工作、休閒都很可以。
         前幾天廣州朋友J在IG上發佈他即將在九月份舉行的婚前派對,淡雅的水藍色海報上,印著她和她未婚夫的英文名,搭配上日文的「披露パーティー」以及中文的「派對」,很是J一貫的風格,簡約大方的設計襯托出主題但也不失巧思。
    嘿 不知不覺你就要滿29歲,正式來到20代的尾巴了!我想說的是這段時間謝謝你,陪我度過了多姿多采的20代。
     猫猫, 虽然我俩素未谋面,我也不知道你是男的女的.也可能是同志,但以我那副屌相来说,不合同志们的胃口,不够帅也不够中性.所以我估计你是一位漂亮的大美女. 在这一年不到的时间里面,我感受到你对我的情义,你对我的教训,像老师一样对我当头棒喝,恨瓦不成钢.你对我的爱与恨,我都照单全收,你的留言我都会细细
    Thumbnail
    完整標題:To be or not to be. That is a question. -- 試譯語出莎士比亞的劇作《哈姆雷特》(Hamlet -- Prince of Denmarke,創作於公元 1599 年 ~ 公元 1602 年期間) 中的這一小段台詞
    Thumbnail
    950327﹙一﹚ 考:國、英、數、地、史 珣:基本上,段考或模擬考的前一個晚上,我都會早一點睡,這樣考試時才會比較有精神。我記得之前的某個星期五我弄到一點才睡,結果隔天整天頭腦空白。 導師:說的是!作息要有規律才好! 爸爸:今天晚上,三樓絃歌不輟,珣和弟弟一會兒彈琴,一會兒吹笛,歌劇魅影和火影忍者