JavaScript中的函数与命令模式,Java也有参考价值
栏目: JavaScript · 发布时间: 6年前
内容简介:命令范式:函数范式:if语句可以被函数getGreeting替代,从而重用:
命令范式:
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) [b]数组相加[/b]
命令范式:
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) [b]提前中断循环[/b] 命令范式:
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([ [0, 'water freezes at 0°C'], [100, 'water boils at 100°C'], [() => 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' [b]类 [/b]命令范式:
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
类型中,然后在最后将其解包。在一般FP应用程序中,可在整个应用程序使用
Maybe
,不需要打包和解包
string
。所以这比你通常看到的要冗长一些。
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 ());
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 使用函数式实现命令模式
- PHP中exec()函数执行系统命令失败
- 关于如何处理面向对象、函数式、命令式、声明式编程
- CVE-2018-19518:PHP imap_open函数任意命令执行漏洞复现
- 【巨杉数据库Sequoiadb】【咨询】【内置SQL】执行exec命令查询substr函数时报错-195
- Flask 偏函数、g对象、flask-session、数据库连接池、信号、自制命令、flask-admin
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
算法艺术与信息学竞赛
刘汝佳 / 清华大学出版社 / 2004-1 / 45.00元
《算法艺术与信息学竞赛》较为系统和全面地介绍了算法学最基本的知识。这些知识和技巧既是高等院校“算法与数据结构”课程的主要内容,也是国际青少年信息学奥林匹克(IOI)竞赛和ACM/ICPC国际大学生程序设计竞赛中所需要的。书中分析了相当数量的问题。 本书共3章。第1章介绍算法与数据结构;第2章介绍数学知识和方法;第3章介绍计算机几何。全书内容丰富,分析透彻,启发性强,既适合读者自学,也适合于课......一起来看看 《算法艺术与信息学竞赛》 这本书的介绍吧!