Scala的implicit如何使用?需要注意啥
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala的implicit如何使用?需要注意啥相关的知识,希望对你有一定的参考价值。
参考技术A 习函数式编程阅读DDD巨著《Patterns, Principles, and Practices of Domain-Driven Design》程Scott第5章提使用函数式编程语言配合贫血模型实践DDD种思路激发我限遐想
软件发领域我已经拥许抽象论量实现技术我认切归根结底都类思维软件发领域具体表达式类认识析软件所要解决业务领域问题思考内容外乎由两部组:『业务流程』与『业务规则』前者答业务先做做问题;者则答遇情况应该做问题两者结合我需要业务结或者叫作实现业务目标
再想想目前习掌握面向象系列何述思维结映射软件呢我认:
于业务流程我其表达若干象间合作比UML序列图象与消息进具化具体类及其职责比类及其若干业务
于业务规则我其表达若干判断逻辑比UML流程图判断支进具化业务if-else语句或者再复杂点表达工厂、策略等设计模式实际运用
我认于复杂业务规则梳理象数归纳进行演绎:假设函数y=f(x)给定x定义域确定y值域特别排列组合等面些问题经采用递归式解决所角度讲函数式编程更贴近类思维习惯所让我自目光转向
选择Scala
选择具体函数式编程语言我首先想同能支持面向象编程即便LISP作函数式编程语言先祖诞已达半世纪单纯函数式编程语言与面向象编程语言相比抽象领域概念、组合系统模块、实现信息隐蔽等面存定差距所直没软件发主流
信息隐蔽原理:西安电科蔡希尧与陈平师于1993合作版《面向象技术》书描述:需求求解离;相关信息——数据结构算集模块其模块隔离能随便访问模块内部信息
其由于我语言路线Pascal → C → C++ → C#所我希望能选择种风格近似于C、强类型函数式编程语言比较F#、R、ErLang等几种见函数式编程语言我终选择Scala
Scala何优势
注:内容节选翻译或参考自《Programming in Scala》第1章、第3章《Programming Scala》第6章算完整意义
函数式编程优势
纯函数没副作用论何何于函数y=f(x)给定x必定y产二义结论于代码测试并发由于给定输入必定预期输受其素干扰所能效减少Bug产
函数式编程量使用immutable值意味着函数运算结总创建新实例避免通并发环境防止数据共享冲突采取保护机制尽管需要额外Copy操作Scala针性提供高效Copy实现及延迟计算等弥补机制
函数等公民函数作表达式部借由函数间嵌套、组合实现复杂判断逻辑
Scala语言本身优势
Scala面向象与函数式编程混合语言所能效结合二者优点
Scala属于Java态圈JVM平台与Java起编译运行所许Java框架、工具都直接应用于Scala语言编写项目
Scala视切数据类型皆象且支持闭包、lambda、by-name参数等特性语简洁明快
Scala使用Actor作并发模型与Akka框架自契合种区别于传统、基于数据共享、锁主要机制并发模型其特点于Actor基本单位、没数据共享、基于消息传递实现Actor间协作效避免死锁、减少竞争
朝要转向数据领域Spark型框架作支撑知乎:与 Hadoop 比何看待 Spark 技术
Scala实践DDD何意义
说我根本目要Scala作实现DDD主要武器试想Scala我实现DDD程能哪些帮助呢我暂且胡侃乱诌:
表示值象、领域事件等元素更直观值象、领域事件DDD都应该immutable往采取POCO形式表示现改用Scalaval及case class表示语层面直观表明修改
类层面实现CQRS语支持用ScalaFunction(返类型非Unit)应CQRSQuery保证类没副作用;用Procedure(返类型Unit)应CQRSCommand明确表明类产修改状态等副作用同语层面能二者进行明确区
模式匹配丰富函数操作除则表达式Scala形式模式匹配语提取数据、完数据组聚合等运算、实现逻辑判断提供强支持比定义def sum_count(ints:Seq[Int) = (ints.sum, ints.size)函数我调用1至6整数序列整数值合计及该序列尺寸:val(sum, count) = sum_count(List(1, 2, 3, 4, 5, 6))
实现DSL提供力支持Scala自带解析框架加灵函数语支持要自实现套DSL及其相应语解析器再困难比配置文件条配置语句表示退休条件龄达60周岁或者工龄届满30:retire = (Age >= 60) || (ServiceLength >= 30)往式自写语解析器条文本转换相应Specification象扔给聚合使用现Scala帮助使编写语解析器环节工作量减少
合理高阶函数设计使规则编写简化比打折规则、费用报销规则往能需要若干层if-else嵌套现则通高阶函数幅简化我强烈推荐刘光聪先视频Refactoring to Functions刘先重构程发现高阶函数强
Actor高效并发打基础Actor
内部完全自治自带用于存储消息mailbox与其Actor能通消息进行交互每Actor都并发基本单位些特点非适合于
采取Event
Sourcing式实现DDD每聚合都比Actor聚合内部始终保持数据强致性聚合间交互领域事件则比Actor间
消息聚合间借由领域事件Saga保证数据终致性
TraitAOP利器TraitScala另特色象AOP织入能态给某类型注入或者结构比配合类Circuitwith面4Trait定义val circuit = new Circuit with Adders with Multiplexers with Flipflops with MultiCoreProcessors创建带加器、乘器、触发器核处理器元件
隐式实现类型扩展提供支持应C#静态扩展Scala通implicit实现数据类型扩展提供便捷Trait外另功能扩展手段
能降低见BDD框架习本尽管点能比较牵强我努力摸索何BDD与DDD结合见Cucumber、Spock等些BDD框架其语与Scala比较相近所我才说
哪些Scala习资料
我目前主要习资料并衷欢迎各位留言补充
书籍
Programming in Scala:由Scala语言设计师Martin Odersky编写循序渐进配合量实例入门必读吧
Programming Scala:视角与面本点没Scala语言基础觉困难适合掌握基本语温故知新
线文档与视频
Scala 官文档:Scala官网作寻找资料发点错
Scala 课堂:文版Scala基本语线课堂
Scala Synatax Primer:由Jim McBeath整理Scala语概要字典用
The Neophyte’s Guide to Scala:名Scala入门指南Scala提取器Extractor作实例始
Scala 初指南:面本指南译本
Effective Scala:文版Scala高效编程
SBT文入门指南:Scala Build Tool
社区
Scala 文社区:算跃原懂
Scala User:Scala入门者聚集没Stack Overflow严格需要点爬墙身手
SDK及IDE
Java SE:先装
Scala SDK:再装
SBT:装
IntelliJ IDEA:装能比较便始Scala编程
写
近读书杂DDD、BDD、Scala、Cucumber及Java基础等等都涉及真恨口吃胖由于间精力限所
现知识消化问题迟迟没进入致用环节能先纸谈兵歹先自习程些思考、看东西先记载备
需
以上是关于Scala的implicit如何使用?需要注意啥的主要内容,如果未能解决你的问题,请参考以下文章