iT邦幫忙

2026 iThome 鐵人賽

DAY 17
0
自我挑戰組

Vscode 實作:用 HTML/CSS/JS 打造醫藥健康小工具箱系列 第 17 篇

【Day 17】【Tool 2 實作】劑量安全上限警示:邏輯判斷與模組化 Function 拆解

  • 分享至 

  • xImage
  •  

本篇文章目錄

  1. 前言:醫療軟體的核心安全原則 ——「兒童劑量不得超越成人上限」
  2. 兒科用藥安全機制:天花板效應
  3. 實戰程式碼:實戰程式碼:整合邊界驗證與上限控制
  4. 經驗優化:將計算邏輯拆解為模组化 Function
  5. 結語

一、 前言:醫療軟體的核心安全原則

在兒科劑量計算中,有一個非常重要的臨床安全鐵則:「無論兒童的體重多重、年齡多大,經由公式推算出的兒童建議劑量,絕對不能超過成人的標準劑量!」

例如:若一位青少年(體重 75 kg)使用克拉克公式(成人劑量×75/68(kg))計算,算出來的數字會達到成人劑量的 $1.1$ 倍。如果程式沒有做好天花板上限控制,就可能產生給藥過量(Overdose)的風險!
https://ithelp.ithome.com.tw/upload/images/20260930/20184266jGS3k8GiUQ.png

今天 [Day 17],我們將在現有的輸入驗證基礎上,加入劑量安全天花板控制,並展示如何將這套邏輯重構成乾淨且易維護的模組化程式碼!

二、 兒科用藥安全機制:天花板效應 (Cap Value)

為了解決極端值與超量問題,我們在程式中加入以下安全防護:

  1. 嚴密的欄位邊界檢查:對於不足 1 歲或 1 kg 的極端輸入(age < 1 / weight < 1),立刻攔截並提示,避免誤算。
  2. 劑量天花板限制 (Cap Value):若 resultDose > adultDose,自動將 resultDose 強制修正為 adultDose 上限。
  3. 68kg 臨床體重基準點:克拉克公式原始以 150 磅(約 68 kg)作為成人標準體重參考值,精準反映體重比例。
    https://ithelp.ithome.com.tw/upload/images/20260930/20184266Gjef4HTHLw.png

三、 實戰程式碼:整合邊界驗證與上限控制

以下是完全對齊你現有程式碼邏輯,並加入安全上限後的精簡實作:

/tool2-dosage.js
https://ithelp.ithome.com.tw/upload/images/20260930/20184266HbOJPFFaeP.png

四、 經驗優化:將計算邏輯拆解為模組化 Function

當我們的程式碼運行無誤後,可以進一步將計算邏輯抽取出來,達成「職責分離(Separation of Concerns)」:

// 模組化公式函式
function getYoungsDose(adultDose, age){
  return adultDose * (age / (age + 12));
}

function getClarksDose(adultDose, weight){
  return adultDose * (weight / 68);
}

// 模組化天花板限制函式
function capDosage(calculatedDose, maxDose){
  if (calculatedDose > maxDose) {
    return { finalDose: maxDose, isCapped: true };
  }
  return { finalDose: calculatedDose, isCapped: false };
}

透過將算式拆解為純函式 (Pure Functions),不僅點擊事件內的程式碼會變得極度簡潔,未來如果要寫單元測試 (Unit Test) 驗證公式時也會非常輕鬆。

五、 結語

今天我們在現有的簡潔程式碼基礎上,成功為 [Tool 2] 構建了劑量天花板安全防護機制,並探討了程式碼模組化的重構方向。

在明天的 [Day 18] 中,我們將進行 [Tool 2 總結與成果驗證],回顧這 5 天來從 HTML Grid 佈局、change 選單切換到公式驗證的完整歷程,為第二個核心工具畫下完美的句點。


上一篇
【Day 16】【Tool 2 實作】兒科劑量演算法:揚氏公式與克拉克公式的 JS 計算與結果渲染
下一篇
【Day 18】【Tool 2 總結】[Tool 2 兒童用藥劑量換算器] 成果總覽與實際功能展示
系列文
Vscode 實作:用 HTML/CSS/JS 打造醫藥健康小工具箱 共 18 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言