iT邦幫忙

1

在 freecodecamp 開啟 daily coding challenge : Day09-Caught Speeding

  • 分享至 

  • xImage
  •  

freecodecamp 是什麼 ?

以下是他們的自介

freeCodeCamp 是一個免費學習編程的開發者社區,涵蓋 Python、HTML、CSS、React、Vue、BootStrap、JSON 教程等,還有活躍的技術論壇和豐富的社區活動,在你學習編程和找工作時爲你提供建議和幫助。

不管你是前端,後端還是全端,尤其是自學者(aka沒有朋友)
都適用這網站,但目前我以前端為主。
https://www.freecodecamp.org/learn/front-end-development-libraries/

最近有空從頭檢視自己 coding 的基礎
這個系列會有我發現這個網站的小細節及 daily challenge
以 day-num 紀錄,但不會每天更新(也是練習寫文章)


Day 09 - Caught Speeding

https://ithelp.ithome.com.tw/upload/images/20251006/20179314VXZJJXumuA.png

---> 翻譯 <---
給定一個表示觀察到的車輛行駛速度的數字數組和一個表示速度限制的數字,返回一個包含兩個項目的數組,即超速的車輛數量,以及這些超速車輛的平均超速量。

(numArr, numLimit) => return [numCar, numOver]

本題重點在於

  • “要考慮沒有車子經過的情況或沒有車子超速的情況“
  • “找出超速的車子”
  • “加總超速的值再平均”

思考一下
.
.
.
.
.
.

  1. for()
    考慮效益我會直接使用for loop,逐個判斷
    numCar = count
    numOver = totalOver/count

    let count = 0;
    let totalOver = 0;
    
  2. reduce()

      const { count, totalOver } = speeds.reduce((acc, s) => {
        if (s > limit) {
          acc.count++;
          acc.totalOver += (s - limit);
        }
        return acc;
      }, { count: 0, totalOver: 0 });
    

但是 GPT 告訴我 reduce 取代 for loop,會讓程式更「函數式」/images/emoticon/emoticon17.gif

  1. 為什麼 reduce 取代了 for loop,讓程式更「函數式」?

    for loop
    你要自己定義「怎麼走」、「怎麼累積」、「怎麼結束」:
    👉 重點在**「流程控制」**。

    reduce
    你只需要描述「如何從一個值累積到下一個值」:
    👉 重點在**「運算規則」**,而不是「迴圈細節」。

    • 為什麼說更「函數式」?
      宣告式 (Declarative)
      for:告訴電腦「怎麼做」
      reduce:告訴電腦「我要什麼結果」
      → reduce 更接近「描述意圖」而不是「實作細節」。

    • 避免副作用 (Less side effects)
      for 通常需要額外宣告變數來存結果 (let sum = 0;)。
      reduce 把累積狀態收斂在一個函數裡,變數不會亂跑。

    • 可組合性 (Composability)
      reduce 的結果可以再拿去串接其他函數式方法 (map, filter 等)。
      for 比較難自然地組合,通常要巢狀或額外變數。

    • 可讀性 (Readability)
      reduce 一眼就知道「這裡是累積運算」。
      for 需要多讀幾行才知道邏輯。


tips

  • javaScript V.S python

    speeds.length = len(speeds)
    for (let s of speeds){...} = for s in speeds:

  • reduce 把 「循環 + 狀態更新」 壓縮在一個純函數裡,讓程式更「函數式」:
    更專注在「邏輯」而不是「控制流程」
    更少副作用,更容易組合
    更符合 宣告式編程 (Declarative programming) 的精神


我是阿mo,中秋節快樂,有沒有大吃大喝呢?我有!/images/emoticon/emoticon71.gif


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言