iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
Software Development

LeetCode-30 Days of JavaScript系列 第 3

LeetCode JS30-Day03 |設置閉包方法 - 2704.To Be Or Not To Be

  • 分享至 

  • xImage
  •  

Day03 - 2704.To Be Or Not To BeEASY

Description❓

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".

寫一個函數“expect”來幫助開發人員測試他們的代碼。 它應該接受任何參數“val”並返回一個具有以下兩個函數的物件:

  • toBe(val) 接受另一個參數,如果兩個值彼此 === 則返回 true。 如果它們不相等,則應拋出錯誤“不等於”。
  • notToBe(val) 接受另一個參數,如果兩個值 !== 彼此相等,則返回 true。 如果它們相等,它應該拋出錯誤“Equal”。

Points

  • 三元運算子
  • 比較運算子、邏輯運算子
  • throw new Error錯誤處理

Solution✍️

[ ▶️挑戰這一題 ] [ 本日代碼 ]

  1. 宣告expect函式 函式會返回 {toBe,notToBe}'兩個函式
const expect = (val1)=>{

   toBe = (val2) => {
      return  ;
   };
   notToBe = (val2) => {
      return ;
   };
   return {toBe,notToBe}
}
  1. toBe,notToBe 兩個函式用三元運算子判斷val2參數與外部作用域的val1是否相符
const expect = (val1)=>{

   toBe = (val2) => {
      return val1 === val2? true : throw new Error ("Not Equal") ;
   };

   notToBe = (val2) => {
      return val1 !== val2? true : throw new Error ("Equal") ;
   };

   return {toBe,notToBe}
}
  1. 修正:三元運算子返回一個表達式的值,而throw new Error是陳述句,不能直接作為表達式返回。
    因此將throw new Error用函式包裝成表達式。
const expect = (val1)=>{

   throwErr= (str)=>{
      throw new Error(str);
   }

   toBe = (val2) => {
      return val1 === val2? true : throwErr("Not Equal") ;
   };

   notToBe = (val2) => {
      return val1 !== val2? true : throwErr("Equal") ;
   };

   return {toBe,notToBe}
}
  1. 參考其他solution
  • 代碼更為簡潔
    • 對於邏輯比較單純的情況,可以直接在return撰寫邏輯
    • 比較運算符本身會return true,因此加上邏輯運算子處理false的結果
const expect = (val1) => {
   throwErr= (str) => {throw new Error(str)};
    
    return {
        toBe: (val2) => val2 === val1 || throwErr("Not Equal"),
        notToBe: (val2) => val2 !== val1 || throwErr("Equal"),
    };
};

Testcase

const A = expect(5);
console.log(A.toBe(5));
// console.log(A.toBe(null));
console.log(A.notToBe(null));

上一篇
LeetCode JS30-Day02 | 學習閉包closure - 2620.Counter
下一篇
LeetCode JS30-Day04 | 打倒第一隻史萊姆!(用閉包) - 2665.Counter II
系列文
LeetCode-30 Days of JavaScript30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言