文章目录

  • I . 中缀表达式 ( 中缀调用 )
  • II . 中缀表达式 ( 中缀调用 ) 示例代码

I . 中缀表达式 ( 中缀调用 )


1 . 中缀表达式作用 : 中缀表达式是 Kotlin 领域特定语言 DSL 自然语言特性实现的核心 , 其能实现类似于自然语言的函数调用方式 ;

2 . 中缀表达式格式 : 在函数前使用 infix 修饰 , 那么该函数就支持中缀调用 , 中缀表达式中 , 可以省略函数调用的 " . " 和 " ( ) " ;

① 中缀表达式声明 : 如果是为现有类扩展函数 , 使用 类名.函数名 , 如果是在类中定义中缀表达式 可以直接使用 函数名 ;

//类中定义支持中缀表达式方法
infix fun 函数名( 参数列表 ) : 返回值类型 {//方法体
}//为现有类扩展函数
infix fun 类名.函数名( 参数列表 ) : 返回值类型 {//方法体
}

② 中缀表达式调用 : 调用的时候 , 可以省略 类对象名称.函数名( 参数列表 ) 中的 " . " 和 " ( ) " , 中间使用空格连接即可 ;

类对象名称 函数名称 参数列表

II . 中缀表达式 ( 中缀调用 ) 示例代码


1 . 中缀表达式示例 : 这里为 List 类型变量扩展函数 printMaxAgeStudent , 其作用是 查找身高高于 180 的人 , 并且使用 infix 声明该函数 , 表明该函数可以使用中缀表达式调用 ;

package dsldata class Student(var name : String, var age : Int, var height : Int)/*这里的  listOf 方法 , 返回一个集合 , 原型如下public fun <T> listOf(vararg elements: T): List<T> = if (elements.size > 0) elements.asList() else emptyList()*/
var students : List<Student> = listOf<Student>(Student("Tom", 12, 190),Student("Jerry", 18, 165),Student("Trump", 18, 178),Student("Jack", 29, 165)
)/*DSL 扩展函数中缀表达式 : 使用空格代替 . 和 ()为 List<Student> 类型变量扩展函数 printMaxAgeStudent扩展内容是 查找身高高于 180 的人*/
infix fun List<Student>.printHeightUpStudent(height : Int) : Unit{//调用 集合的高阶函数 filter , 筛选出身高高于 180 的学生filter {it.height > height}.forEach(::println)}fun main() {//调用 DSL 扩展函数 , 打印身高高于 180 的学生students.printHeightUpStudent(180)//使用中缀表达式 , 也可以实现上述功能 , 前提是方法前需要使用 infix 修饰students printHeightUpStudent 180
}

2 . 执行结果 : 使用正常的函数调用方式 , 和 中缀表达式调用方式 , 输出的结果都一样 ;

Student(name=Tom, age=12, height=190)
Student(name=Tom, age=12, height=190)

【Kotlin】Kotlin 领域特定语言 DSL 原理 二 ( 中缀表达式 )相关推荐

  1. 【Kotlin】Kotlin 领域特定语言 DSL 原理 一 ( DSL 简介 | 函数 / 属性扩展 )

    文章目录 I . DSL 简介 II . Kotlin 函数扩展 III . Kotlin 属性扩展 I . DSL 简介 1 . DSL ( Domain Specific Language ) 领 ...

  2. DSL 领域特定语言

    一.DSL介绍 DSL(Domain Specific Language)是针对某一领域,具有受限表达性的一种计算机程序设计语言. 常用于聚焦指定的领域或问题,这就要求 DSL 具备强大的表现力,同时 ...

  3. 在Visual Studio 2012中使用VMSDK开发领域特定语言(二)

    本文为<在Visual Studio 2012中使用VMSDK开发领域特定语言>专题文章的第二部分,在这部分内容中,将以实际应用为例,介绍开发DSL的主要步骤,包括设计.定制.调试.发布以 ...

  4. 【转】开发者需要了解的领域特定语言(DSL)

    转自:开发者需要了解的领域特定语言(DSL) - 知乎 领域特定语言是在特定领域下用于特定上下文的语言.作为开发者,很有必要了解领域特定语言的含义,以及为什么要使用特定领域语言. 领域特定语言doma ...

  5. 开发者需要了解的领域特定语言(DSL)

    领域特定语言是在特定领域下用于特定上下文的语言.作为开发者,很有必要了解领域特定语言的含义,以及为什么要使用特定领域语言. 领域特定语言 domain-specific language (DSL)是 ...

  6. 走近“领域特定语言”(Domain-Specific Languages)

    领域特定语言(Domain-Specific Languages,简称DSL),是一个很有用的术语和概念,但其边界很模糊.一些东西很明显是DSL,但另一些可能会引发争议.本文接下来就走近"领 ...

  7. 在Visual Studio 2012中使用VMSDK开发领域特定语言(一)

    前言 本专题主要介绍在Visual Studio 2012中使用Visualization & Modeling SDK进行领域特定语言(DSL)的开发,包括两个部分的内容.在第一部分中,将对 ...

  8. 走近“领域特定语言”

    文/Martin Fowler 领域特定语言(Domain-Specific Languages,简称DSL),是一个很有用的术语和概念,但其边界很模糊.一些东西很明显是DSL,但另一些可能会引发争议 ...

  9. DSL扩展函数,中缀表达式

    DSL扩展函数,中缀表达式 data class Girl(val name: String, val age: Int, val addr: String) var Girls = listOf&l ...

最新文章

  1. 如何用 OpenCV、Python 和深度学习实现面部识别?
  2. xlst 解析 html c,怎樣實現利用xslt把xml文件內容顯示到html文件中?急!
  3. 初等数论--原根--原根间的关系,原根个数
  4. 【ACM】会场安排问题
  5. ios 持续获取定位 高德地图_概述-iOS 定位SDK | 高德地图API
  6. 采购模板html5,蓝色的采购信息管理系统手机界面wap模板
  7. 西部数码虚拟服务器备案,虚拟主机备案才能使用吗
  8. Java for LintCode 验证二叉查找树
  9. C# 输入选择文件夹
  10. flutter框架优缺点_小程序框架全面测评
  11. 二叉树:前中后序迭代方式统一写法
  12. 篮球30秒可控计时器
  13. 三菱gxworks3安装失败_三菱gx works3下载 Gx Works3(三菱PLC编程软件) v1.031h 中文安装版(附安装教程+序列号) 下载-脚本之家...
  14. 《CSS权威指南》第3版
  15. Buddy/Sponsor培训•信任的构建
  16. 计算机老出现安全警报怎么办,windows安全警报怎么关闭,教您怎么关闭windows安全警报...
  17. Sandboxie免费开源沙箱软件下载与详细使用教程
  18. 【安全牛】一起来打靶第一周笔记
  19. Git创建本地仓库执行git init时报Permission denied的问题
  20. 论邮政有多硬核!邮车意外滑落悬崖,快递员的行为让人动容!

热门文章

  1. 省选前的反演抢救计划
  2. poj2456 Aggressive cows(二分查找)
  3. 10分钟教你看懂mongodb的npm包
  4. CodeForces 671C - Ultimate Weirdness of an Array
  5. 设计模式-----单例模式
  6. Linuxnbsp;JDK1.4卸载与1.6的安装
  7. 我的第一篇博客,以此写写内心的独白
  8. [O(N)的我不会]树网的核
  9. 2019 训练比赛 记录
  10. JS事件冒泡机制和兼容性添加事件