y1lichen / git-practice

0 stars 0 forks source link

Week 02 回饋 #2

Open azole opened 1 week ago

azole commented 1 week ago

readme

那為什麼需要 nvm 跟 npm 呢?

第一週作業的回饋時有提到,要練習更深入一點的思考,所以要請你試試看回答,那為什麼需要 nvm 跟 npm 這樣的工具?

sum

以用 js 的 array 來完成這點來說,你用了 reduce, forEach, eval + join,你覺得哪一種比較合適?

fib

這邊前面兩個 if 是否可以合併?

function fib(n) {
  if (n == 0) {
    // fib(0)=0
    return 0
  } else if (n == 1) {
    // fib(1)=1
    return 1
  }
  // n > 1時,fib(n)=fib(n-1)+fib(n-2)
  return fib(n - 1) + fib(n - 2)
}

stack

以 pop 這個函式來說

  1. 有的時候有回傳值,有的時候沒有?
  2. if 所判斷的條件,isEmpty 就在做一樣的事,是不是可以重用?
    pop() {
    if (this.#items.length === 0) {
      console.log("stack is already empty");
      return;
    }
    return this.#items.pop();
    }

另外,你目前放在 github 上的 stack & main 是可以執行的嗎? 就是 import Stack 不會失敗?

以上問題要請你在 issue 這邊回覆喔。

y1lichen commented 1 week ago

1. 為什麼需要 nvm 跟 npm 呢?

nvm: 一個開發者可能會同時有多個專案,每個專案使用的node.js版本不一定相同,此時就可以利用nvm切換版本。 npm: 假如沒有npm統一管理套件的工具,若要使用其他人寫好的依賴就得自行到github或官網下載,簡化安裝。有了npm專案內只要有package.json所有共同開發的人就可以很輕易地align用到的套件版本。

2. 以用 js 的 array 來完成這點來說,你用了 reduce, forEach, eval + join,你覺得哪一種比較合適?

由sum.js的實驗可知先轉為字符串再用eval效率很差,實在不是合適做法。 我認為reduce和forEach兩者都是可用的做法。其中,我會選擇forEach而不是reduce,因為forEach的邏輯更加直觀。

3. 修改為:

function fib(n) {
  if (n == 0 || n == 1) {
     return n;
  }
  // n > 1時,fib(n)=fib(n-1)+fib(n-2)
  return fib(n - 1) + fib(n - 2)
}

4.

pop修改為:

pop() {
    if (this.isEmpty()) {
      console.log("stack is already empty");
      return null;
    }
    return this.#items.pop();
  }

另外,目前放在 github 上的 stack & main 是可以執行的。

Untitled
y1lichen commented 1 week ago

另外,要和老師討論的是若stack為空時pop,我原先的做法是return;,實際是return undefined。在stack為空時pop回傳null會比undefined合理嗎?

azole commented 1 week ago

undefined 跟 null,你覺得你會怎麼解釋這兩者呢?

azole commented 1 week ago

eval 除了沒有效率外,還很「危險」 ==> 可以研究一下我為什麼這樣說嗎? 可以問問看 AI 怎麼說,或是上網查都可以,但回答我的時候,要是自己消化、理解、內化過的內容,好嗎?

y1lichen commented 1 week ago

undefined 跟 null,你覺得你會怎麼解釋這兩者呢?

undefined:pop 的意義是 pop 目前 stack 內最後加進的,當 stack 為空時 stack 內最後加進的為 undefined。 null:stack 已經空了,再 pop 出來就是 null(空)

我會對要return undefined 跟 null 有疑問的原因是 以 array 來實作stack時,array 是可以存null的。如果 return null 會不知道array是真的空了還是真的存了一個null。

y1lichen commented 1 week ago

ev

可能會受到注入攻擊。舉例來說,如果在前端使用eval寫法,若有人在array新增惡意項目,如:['1', '2', 'alert("哈哈哈")'],會跑出一個不在預期內的alert甚至是更嚴重的攻擊。

azole commented 1 week ago

非常好的問題耶,你可以在 discord 上帶大家討論嗎?

azole commented 1 week ago

記錄一下 stack 這個在 discord 上討論

eval 這個,對,所以我們都會說盡可能不要用 eval。