zl程序教程

scala编程第15章

  • ScalaPB(5):用akka-stream实现reactive-gRPC详解编程语言

    ScalaPB(5):用akka-stream实现reactive-gRPC详解编程语言

     在前面几篇讨论里我们介绍了scala-gRPC的基本功能和使用方法,我们基本确定了选择gRPC作为一种有效的内部系统集成工具,主要因为下面gRPC支持的几种服务模式: 1、Unary-Call:独立的一对client-request/server-response,是我们常用的http交互模式 2、Server-Streaming:client发出一个request后从serv

    日期 2023-06-12 10:48:40     
  • SDP(13): Scala.Future – far from completion,绝不能用来做甩手掌柜详解编程语言

    SDP(13): Scala.Future – far from completion,绝不能用来做甩手掌柜详解编程语言

     在前面几篇关于数据库引擎的讨论里很多的运算函数都返回了scala.Future类型的结果,因为我以为这样就可以很方便的实现了non-blocking效果。无论任何复杂的数据处理操作,只要把它们包在一个Future{ }里扔给系统运算就算完事不理了,马上可以把关注放到编程的其它部分了。在3月17日的深圳scala用户meetup里我做了个关于scala函数式编程的分享,里面我提到现在使用

    日期 2023-06-12 10:48:40     
  • Akka(27): Stream:Use case-Connecting Slick-dbStream & Scalaz-stream-fs2详解编程语言

    Akka(27): Stream:Use case-Connecting Slick-dbStream & Scalaz-stream-fs2详解编程语言

       在以前的博文中我们介绍了Slick,它是一种FRM(Functional Relation Mapper)。有别于ORM,FRM的特点是函数式的语法可以支持灵活的对象组合(Query Composition)实现大规模的代码重复利用,但同时这些特点又影响了编程人员群体对FRM的接受程度,阻碍了FRM成为广为流行的一种数据库编程方式。所以我们只能从小众心态来探讨如何改善Sl

    日期 2023-06-12 10:48:40     
  • Scalaz(55)- scalaz-stream: fs2-基础介绍,fs2 stream transformation详解编程语言

    Scalaz(55)- scalaz-stream: fs2-基础介绍,fs2 stream transformation详解编程语言

        fs2是scalaz-stream的最新版本,沿用了scalaz-stream被动式(pull model)数据流原理但采用了全新的实现方法。fs2比较scalaz-stream而言具备了:更精简的基础组件(combinator)、更安全的类型、资源使用(type safe, resource safety)、更高的运算效率。由于fs2基本沿用了scalaz-strea

    日期 2023-06-12 10:48:40     
  • Scalaz(53)- scalaz-stream: 程序运算器-application scenario详解编程语言

    Scalaz(53)- scalaz-stream: 程序运算器-application scenario详解编程语言

        从上面多篇的讨论中我们了解到scalaz-stream代表一串连续无穷的数据或者程序。对这个数据流的处理过程就是一个状态机器(state machine)的状态转变过程。这种模式与我们通常遇到的程序流程很相似:通过程序状态的变化来推进程序进展。传统OOP式编程可能是通过一些全局变量来记录当前程序状态,而FP则是通过函数组合来实现状态转变的。这个FP模式讲起来有些模糊和抽

    日期 2023-06-12 10:48:40     
  • Scalaz(50)- scalaz-stream: 安全的无穷运算-running infinite stream freely详解编程语言

    Scalaz(50)- scalaz-stream: 安全的无穷运算-running infinite stream freely详解编程语言

       scalaz-stream支持无穷数据流(infinite stream),这本身是它强大的功能之一,试想有多少系统需要通过无穷运算才能得以实现。这是因为外界的输入是不可预料的,对于系统本身就是无穷的,比如键盘鼠标输入什么时候终止、网站上有多少网页、数据库中还有多少条记录等等。但对无穷数据流的运算又引发了新的挑战。我们知道,fp程序的主要运算方式是递归算法,这是个问题产生

    日期 2023-06-12 10:48:40     
  • Scalaz(47)- scalaz-stream: 深入了解-Source详解编程语言

    Scalaz(47)- scalaz-stream: 深入了解-Source详解编程语言

       scalaz-stream库的主要设计目标是实现函数式的I/O编程(functional I/O)。这样用户就能使用功能单一的基础I/O函数组合成为功能完整的I/O程序。还有一个目标就是保证资源的安全使用(resource safety):使用scalaz-stream编写的I/O程序能确保资源的安全使用,特别是在完成一项I/O任务后自动释放所有占用的资源包括file h

    日期 2023-06-12 10:48:40     
  • Scalaz(39)- Free :a real monadic program详解编程语言

    Scalaz(39)- Free :a real monadic program详解编程语言

       一直感觉FP比较虚,可能太多学术性的东西,不知道如何把这些由数学理论在背后支持的一套全新数据类型和数据结构在现实开发中加以使用。直到Free Monad,才真正感觉能用FP方式进行编程了。在前面我们已经花了不小篇幅来了解Free Monad,这次我想跟大家讨论一下用Free Monad来编写一个真正能运行的完整应用程序。当然,这个程序必须具备FP特性,比如函数组合(fun

    日期 2023-06-12 10:48:40     
  • Scalaz(36)- Free :实践-Free In Action – 实用体验详解编程语言

    Scalaz(36)- Free :实践-Free In Action – 实用体验详解编程语言

      在上面几期讨论中我们连续介绍了Free Monad。因为FP是纯函数编程,也既是纯函数的组合集成,要求把纯代码和副作用代码可以分离开来。Free Monad的程序描述(AST)和程序实现(Interpretation)关注分离(separation of concern)模式恰恰能满足FP要求。我们可以用一些代数数据类型(ADT Algebraic Data Type)来模

    日期 2023-06-12 10:48:40     
  • Scalaz(35)- Free :运算-Trampoline,say NO to StackOverflowError详解编程语言

    Scalaz(35)- Free :运算-Trampoline,say NO to StackOverflowError详解编程语言

       在前面几次讨论中我们介绍了Free是个产生Monad的最基本结构。它的原理是把一段程序(AST)一连串的运算指令(ADT)转化成数据结构存放在内存里,这个过程是个独立的功能描述过程。然后另一个独立运算过程的Interpreter会遍历(traverse)AST结构,读取结构里的运算指令,实际运行指令。这里的重点是把一连串运算结构化(reify)延迟运行,具体实现方式是把M

    日期 2023-06-12 10:48:40     
  • Scalaz(34)- Free :算法-Interpretation详解编程语言

    Scalaz(34)- Free :算法-Interpretation详解编程语言

      我们说过自由数据结构(free structures)是表达数据类型的最简单结构。List[A]是个数据结构,它是生成A类型Monoid的最简单结构,因为我们可以用List的状态cons和Nil来分别代表Monoid的append和zero。Free[S,A]是个代表Monad的最简单数据结构,它可以把任何Functor S升格成Monad。Free的两个结构Suspend,Retu

    日期 2023-06-12 10:48:40     
  • Scalaz(25)- Monad: Monad Transformer-叠加Monad效果详解编程语言

    Scalaz(25)- Monad: Monad Transformer-叠加Monad效果详解编程语言

      中间插播了几篇scalaz数据类型,现在又要回到Monad专题。因为FP的特征就是Monad式编程(Monadic programming),所以必须充分理解认识Monad、熟练掌握Monad运用。曾经看到一段对Monad的描述:“Monadic for-comprehension就是一种嵌入式编程语言,由它的Monad提供它的语法”。但如果每一种Monad的for-comprehe

    日期 2023-06-12 10:48:40     
  • Scalaz(22)- 泛函编程思维: Coerce Monadic Thinking详解编程语言

    Scalaz(22)- 泛函编程思维: Coerce Monadic Thinking详解编程语言

      马上进入新的一年2016了,来点轻松点的内容吧。前面写过一篇关于用Reader实现依赖注入管理的博文(Scalaz(16)- Monad:依赖注入-Dependency Injection By Reader Monad)。刚好年底这几天抽空重审了一遍,这时才真正认识到让一个老资格OOP程序猿去编写一段FP程序时会发生什么事情:他会用FP语法和数据类型按照OOP的思维编写程序。其结果

    日期 2023-06-12 10:48:40     
  • Scalaz(20)-Monad: Validation-Applicative版本的Either详解编程语言

    Scalaz(20)-Monad: Validation-Applicative版本的Either详解编程语言

      scalaz还提供了个type class叫Validation。乍看起来跟//没什么分别。实际上这个Validation是在//的基础上增加了Applicative功能,就是实现了ap函数。通过Applicative实例就可以同时运算多个Validation并返回多条异常信息。所以,//与Validation核心分别就在于Validation可以返回多条异常信息。Validatio

    日期 2023-06-12 10:48:40     
  • Scalaz(19)- Monad: // – Monad 版本的 Either详解编程语言

    Scalaz(19)- Monad: // – Monad 版本的 Either详解编程语言

      scala标准库提供了一个Either类型,它可以说是Option的升级版。与Option相同,Either也有两种状态:Left和Right,分别对应Option的None和Some,不同的是Left可以返回一个值。我们通常用这个值来表述异常信息。scalaz也提供了自己版本的Either,并用//来分辨表示,以及两种状态-//和//-。我想scalaz特别提供//是有原因的://

    日期 2023-06-12 10:48:40     
  • Scalaz(12)- Monad:再述述flatMap,顺便了解MonadPlus详解编程语言

    Scalaz(12)- Monad:再述述flatMap,顺便了解MonadPlus详解编程语言

      在前面的几篇讨论里我们初步对FP有了些少了解:FP嘛,不就是F[A]吗?也是,FP就是在F[]壳子(context)内对程序的状态进行更改,也就是在F壳子(context)内施用一些函数。再直白一点就是在F壳子内进行OOP惯用的行令编程(imperative programming)。当然,既然是在壳子(context)内进行编程这种新的模式,那么总需要些新的函数施用方法吧。我们再次

    日期 2023-06-12 10:48:40     
  • Scalaz(11)- Monad:你存在的意义详解编程语言

    Scalaz(11)- Monad:你存在的意义详解编程语言

        前面提到了scalaz是个函数式编程(FP)工具库。它提供了许多新的数据类型、拓展的标准类型及完整的一套typeclass来支持scala语言的函数式编程模式。我们知道:对于任何类型,我们只需要实现这个类型的typeclass实例就可以在对这个类型施用所对应typeclass提供的所有组件函数了(combinator)。突然之间我们的焦点好像都放在了如何获取typecl

    日期 2023-06-12 10:48:40     
  • Scalaz(8)- typeclass:Monoid and Foldable详解编程语言

    Scalaz(8)- typeclass:Monoid and Foldable详解编程语言

      Monoid是种最简单的typeclass类型。我们先看看scalaz的Monoid typeclass定义:scalaz/Monoid.scala 1 trait Monoid[F] extends Semigroup[F] { self = 2 //// 3 /** The identity element for `append`. */ 4 def zero:

    日期 2023-06-12 10:48:40     
  • Scalaz(7)- typeclass:Applicative-idomatic function application详解编程语言

    Scalaz(7)- typeclass:Applicative-idomatic function application详解编程语言

        Applicative,正如它的名称所示,就是FP模式的函数施用(function application)。我们在前面的讨论中不断提到FP模式的操作一般都在管道里进行的,因为FP的变量表达形式是这样的:F[A],即变量A是包嵌在F结构里的。Scalaz的Applicative typeclass提供了各种类型的函数施用(function application)和升格

    日期 2023-06-12 10:48:40     
  • Scalaz(1)- 基础篇:隐式转换解析策略-Implicit resolution详解编程语言

    Scalaz(1)- 基础篇:隐式转换解析策略-Implicit resolution详解编程语言

      在正式进入scalaz讨论前我们需要理顺一些基础的scalaz结构组成概念和技巧。scalaz是由即兴多态(ad-hoc polymorphism)类型(typeclass)组成。scalaz typeclass在scala中的应用有赖于scala compiler的一项特别功能:隐式转换(implicit conversion),使程序表述更精简。由于隐式转换是一项compiler

    日期 2023-06-12 10:48:40     
  • 泛函编程(3)-认识Scala和泛函编程详解编程语言

    泛函编程(3)-认识Scala和泛函编程详解编程语言

       接着昨天的文章,再示范一个稍微复杂一点的尾递归tail recursion例子:计算第n个Fibonacci数。Fibonacci数第一、第二个数值分别是0,1,按顺序后面的数值是前面两个数的加合。例如:0,1,1,2,3,5 1 def fib(n: Int): Int = { 2 @annotation.tailrec 3 def go(cnt: I

    日期 2023-06-12 10:48:40     
  • 怎样学习Scala泛函编程详解编程语言

    怎样学习Scala泛函编程详解编程语言

           确切来说应该是我打算怎么去学习Scala泛函编程。在网上找不到系统化完整的Scala泛函编程学习资料,只好把能找到的一些书籍、博客、演讲稿、论坛问答、技术说明等组织一下,希望能达到学习目的。关于Scala语言的教材在国内网上还是比较容易找到的;可以到Scala语言官方网站,国内Scala社区网站这些地方去看看了解一下;深一点的参考一下在路上,里

    日期 2023-06-12 10:48:40     
  • 实用的Scala泛函编程详解编程语言

    实用的Scala泛函编程详解编程语言

         既然谈到实用编程,就应该不单止了解试试一个新的编程语言那么简单了,最好通过实际的开发项目实例来演示如何编程。心目中已经有了一些设想;想用Scala泛函编程搞一个开源的数据平台应用系统,也就是在云平台PaaS层对上一层后台的数据应用平台。想想当电子商务和云应用真正普及后将会出现一大批没有云应用软件开发能力的用户。将来真正的云服务提供商,单提供虚拟机租赁服务是远

    日期 2023-06-12 10:48:40     
  • Scala编程快速入门系列(二)详解编程语言

    Scala编程快速入门系列(二)详解编程语言

    九、Scala JDBC 由于整理的篇幅较长,所以文章计划分三次发布。第一部分的内容请转至系列(一)。 四、Scala集合 1. Scala集合概述 Scala对集合的操作就是Spark程序的实现方式。Spark中有一个RDD(Resilience弹性的、Distributed分布式、DataSet数据集),spark的程序都是将源数据加载过来变成一个RDD,然后每一步操作都是集合的元素

    日期 2023-06-12 10:48:40     
  • Scalaz(22)- 泛函编程思维: Coerce Monadic Thinking

    Scalaz(22)- 泛函编程思维: Coerce Monadic Thinking

     马上进入新的一年2016了,来点轻松点的内容吧。刚好年底这几天抽空重审了一遍,这时才真正认识到让一个老资格OOP程序猿去编写一段FP程序时会发生什么事情:他会用FP语法和数据类型按照OOP的思维编写程序。其结果就是一段尴尬的代码,让人看得不知怎么去形容,更不用提FP程序的精简高雅了。我在前面博文的示范程序正是落入了这个OOP思维陷阱。 我们先把源代码搬过来看看: package Exer

    日期 2023-06-12 10:48:40     
  • 怎样学习Scala泛函编程

    怎样学习Scala泛函编程

         确切来说应该是我打算怎么去学习Scala泛函编程。在网上找不到系统化完整的Scala泛函编程学习资料,只好把能找到的一些书籍、博客、演讲稿、论坛问答、技术说明等组织一下,希望能达到学习目的。关于Scala语言的教材在国内网上还是比较容易找到的;可以到Scala语言官方网站,国内Scala社区网站这些地方去看看了解一下;深一点的参考一下在路上,里面包括了一些泛函编程的概念性内容。    

    日期 2023-06-12 10:48:40     
  • Scalaz(18)- Monad: ReaderWriterState-可以是一种简单的编程语言

    Scalaz(18)- Monad: ReaderWriterState-可以是一种简单的编程语言

     说道FP,我们马上会联想到Monad。我们说过Monad的代表函数flatMap可以把两个运算F[A],F[B]连续起来,这样就可以从程序的意义上形成一种串型的流程(workflow)。更直白的讲法是:任何类型只要实现了flatMap就可以用for-comprehension, for{...}yield。在这个for{...}里我们可以好像OOP一样编写程序。这个for就是一种运算模式,它规范

    日期 2023-06-12 10:48:40     
  • Scala入门到精通——第二十九节 Scala数据库编程

    Scala入门到精通——第二十九节 Scala数据库编程

    本节的工程项目采用的是Maven Project,在POM.xml文件中添加下面两个依赖就可以使用scala进行JDBC方式及Slick框架操作MySQL数据库: dependency groupId mysql /groupId artifactId mysql-connector-java /artifactId version 5.1.18 /version /d

    日期 2023-06-12 10:48:40     
  • Scala - 快速学习09 - 函数式编程:一些操作

    Scala - 快速学习09 - 函数式编程:一些操作

    1- 集合类(collection) 系统地区分了可变的和不可变的集合。 scala.collection包中所有的集合类 可变集合(Mutable) 顾名思义,意味着可以修改,移除或者添加一个元素。 scala.collection.mutable 中的所有集合类: 不可变集合(Immutable) 对不可变集合的操作(修改,添加,删除某个集合元素),都是返回一个新的集合,原来的集合

    日期 2023-06-12 10:48:40     
  • Scala Akka网络编程:Client Server网络通信(你问我答)案例

    Scala Akka网络编程:Client Server网络通信(你问我答)案例

    最终效果 Server端 package cn.zxl.akka.server import akka.actor._ import cn.zxl.akka.common.{ClientMessage, Serve

    日期 2023-06-12 10:48:40     
  • Scala Actor并发编程入门示例

    Scala Actor并发编程入门示例

    代码 package cn.zxl.actor import akka.actor.{Actor, ActorRef, ActorSystem, Props} /** * @description: * &

    日期 2023-06-12 10:48:40