JavaScript中的函式與命令模式,Java也有參考價值
這篇文章的目的並不是說一種正規化比另一種正規化更好。它只是顯示您遇到的常見模式及其同等的函式實現方法。(banq注:其實對使用Java Stream替代if/else也有參考作用)
if / else
命令正規化:
const hour = 14 let greeting if (hour < 18) { greeting = 'Good day'; } else { greeting = 'Good evening'; } |
函式正規化:
if語句可以被函式getGreeting替代,從而重用:
const isDay = hour => hour < 18 const getGreeting = hour => isDay(hour) ? 'Good Day' : 'Good Evening' const greeting = getGreeting (hour) |
if (無else)
命令正規化:
let name = 'joel' if (name != null) { name = name.toUpperCase() } |
函式正規化:
isNotnull和toUpperCase市可重用的函式:
import when from 'mojiscript/logic/when' const isNotNull = obj => obj != null const toUpperCase = when (isNotNull) (string => string.toUpperCase ()) const name = 'joel' const upperName = toUpperCase (name) |
陣列相加
命令正規化:
const values = [1, 2, 3] let sum = 0 for (const x of values) { sum = sum + x } 函式正規化: 不將sum變成可變變數: |
const values = [1, 2, 3] const add = (x, y) => x + y const sum = values.reduce(add) |
[b]for/if[/b] |
命令正規化:
const values = [1, 2, 3, 4, 5] let evens = for (const x of values) { if (x % 2 === 0) { evens.push(x) } } |
函式正規化:
不要將evens成為可變:
import filter from 'mojiscript/list/filter' const values = [1, 2, 3, 4, 5] const isEven = num => num % 2 === 0 const evens = filter (isEven) (values) |
提前中斷迴圈
命令正規化:
const values = [1, 2, 3] let sum = 0 for (const x of values) { if (x > 3) break sum = sum + x } |
函式正規化:
使用reduceWhile,類似reduce,能接受一個predicate提早結束。
import reduceWhile from 'mojiscript/list/reduceWhile' const add = x => y => x + y const lte3 = num => num <= 3 const sum = reduceWhile (() => lte3) (add) (0) (values) |
if / else if / else
命令正規化:
const fn = temp => { if (temp === 0) return 'water freezes at 0°C' else if (temp === 100) return 'water boils at 100°C' else return `nothing special happens at ${temp}°C` } fn(0) //=> 'water freezes at 0°C' fn(50) //=> 'nothing special happens at 50°C' fn(100) //=> 'water boils at 100°C' |
函式正規化:
import cond from 'mojiscript/logic/cond' import $ from 'mojiscript/string/template' const fn = cond([ <p class="indent">[0, 'water freezes at 0°C'], <p class="indent">[100, 'water boils at 100°C'], <p class="indent">[() => true, $`nothing special happens at ${0}°C`] ]) fn(0) //=> 'water freezes at 0°C' fn(50) //=> 'nothing special happens at 50°C' fn(100) //=> 'water boils at 100°C' |
類
命令正規化:
class Cat { constructor() { this.sound = 'Meow' } talk() { return this.sound } } const cat = new Cat() const talk = cat.talk cat.talk() //=> 'Meow' talk() //=> Error: Cannot read property 'sound' of undefined |
函式正規化:
const cat = { sound: 'Meow' } const dog = { sound: 'Woof' } const talk = animal => animal.sound talk (cat) //=> 'Meow' talk (dog) //=> 'Woof' |
檢查空NULL
命令正規化:
const toUpper = string => { if (string != null) { return string.toUpperCase() } } |
函式正規化:
此示例將引數包裝在一個
Maybe |
import S from 'sanctuary' const toUpper = S.pipe ([ S.toMaybe, S.map (string => string.toUpperCase ()), S.maybeToNullable ]) // If you use `Maybe` throughout your app, this would be your `toUpper` function. const toUpper = S.map (string => string.toUpperCase ()); |
相關文章
- Ramda 函式庫參考教程函式
- 2.13 靜默模式DBCA命令參考模式
- js 函式中形參與實參的關係JS函式
- JavaScript 函式形參和實參JavaScript函式
- delphi函式參考手冊 (轉)函式
- React中this值繫結和事件函式傳參React事件函式
- TypeScript 中函式的理解?與 JavaScript 函式的區別?TypeScript函式JavaScript
- JavaScript 物件與陣列參考大全JavaScript物件陣列
- to_char函式格式轉換參考函式
- SRVCTL 命令參考
- java如何實現javascript中的eval函式JavaScript函式
- javascript中的函式JavaScript函式
- php中函式的實參和形參PHP函式
- Oracle分析函式參考手冊(轉)一Oracle函式
- Oracle分析函式參考手冊(轉)二Oracle函式
- top命令的Load average 含義及效能參考基值
- 函式形參與實參的體會與對比函式
- 無參過程與無參函式函式
- 獲取javascript函式形參的數目JavaScript函式
- Oracle ASMCMD命令參考OracleASM
- Javascript的函式呼叫與thisJavaScript函式
- JavaScript 的正則也有單行模式了JavaScript模式
- Python的函式形參和返回值Python函式
- Redis(四)--- Redis的命令參考Redis
- JavaScript函式模式詳解JavaScript函式模式
- 詳解JavaScript函式模式JavaScript函式模式
- javascript建構函式的返回值JavaScript函式
- javascript中的原生函式JavaScript函式
- javascript中的trim函式JavaScript函式
- Oracle 9i 分析函式參考手冊Oracle函式
- JavaScript的迭代函式與迭代函式的實現JavaScript函式
- JavaScript | 函式與方法JavaScript函式
- JavaScript中的compose函式和pipe函式JavaScript函式
- JavaScript Math(數學) 參考JavaScript
- JavaScript物件參考手冊JavaScript物件
- linux/unix命令參考Linux
- oracle 9i分析函式參考手冊 (二)Oracle函式
- Oracle 9i 分析函式參考手冊(1)Oracle函式