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;
},


avatar-img
0會員
5內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
主要來講宣告函式跟箭頭函式 : 宣告函式(Function Declaration) 語法: function functionName(parameters) { return result; } 特點: 使用 function 關鍵字 函式名稱是必需的 存在函式
Thumbnail
2023.1.15 設x求一個未知,有兩個就加y。
※ TypeScript範例說明: interface ITest { test1: string test2: number print: (arg: string[]) => boolean } class Test implements ITest { public te
※ 條件判斷語法 決策中需要處理分歧的狀況,就會用到「if」、「else if」、「else」。 ※ 語法結構: 條件式使用小括號(),裡面放判斷式。 要執行的程式碼放在大括號{}裡。 條件式只會有 true 或 false 兩種結果。 ※ 常用的比較運算子: > 大於 < 小於
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
主要來講宣告函式跟箭頭函式 : 宣告函式(Function Declaration) 語法: function functionName(parameters) { return result; } 特點: 使用 function 關鍵字 函式名稱是必需的 存在函式
Thumbnail
2023.1.15 設x求一個未知,有兩個就加y。
※ TypeScript範例說明: interface ITest { test1: string test2: number print: (arg: string[]) => boolean } class Test implements ITest { public te
※ 條件判斷語法 決策中需要處理分歧的狀況,就會用到「if」、「else if」、「else」。 ※ 語法結構: 條件式使用小括號(),裡面放判斷式。 要執行的程式碼放在大括號{}裡。 條件式只會有 true 或 false 兩種結果。 ※ 常用的比較運算子: > 大於 < 小於