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

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

文章目录

I . DSL 简介

II . Kotlin 函数扩展

III . Kotlin 属性扩展



I . DSL 简介


1 . DSL ( Domain Specific Language ) 领域特定语言 : 针对某一个特定的领域的语言 , 如 SQL 语言 ;



2 . DSL 用途 : DSL 用于某个特定领域 , 主要是该领域的专家使用 , 通过简单的编程 , 可以描述该领域中的事物 , 这个简单的编程语言就是 DSL 领域特定语言 ; 如 SQL 是给数据库管理员使用的管理数据库的 DSL ;



3 . DSL 与 编程语言区别 :



① 使用者不同 : DSL 是特定领域的专家使用 , 编程语言是程序员使用 ;


② 作用范围不同 : DSL 仅能表示特定领域的事物模型 , 编程语言可以表现任何事物和模型 ;



4 . 开发 DSL 的要求 : 开发一种领域特定语言 , 需要能完整表现该领域的模型和事物 , 并且语言简洁 , 接近真实语言 , 能对非编程人员隐藏该语言实现的细节 ;



5 . Kotlin 中的 DSL : DSL 是 Kotlin 语言的特性之一 , 使用 DSL 可以让函数调用非常接近真实的语言 ;



6 . Kotlin 中实现 DSL 的原理 : Kotlin 中使用 ① 函数扩展 , ② Lambda 表达式 , ③ infix 中缀表达式 , ④ invoke 约定行为 , 等 Kotlin 特性原理实现 DSL 开发 ;




II . Kotlin 函数扩展


1 . 函数扩展作用 : Kotlin 中的函数 / 属性 扩展 , 可以为任意定义好的类 , 扩展任意函数或属性 ;



2 . 函数扩展语法格式 : 为一个定义好的类在外部定义一个新的函数 , 为 T 类型定义新的类 , 使用如下格式扩展函数 ;


fun 要扩展函数的类型.扩展方法名(参数列表) : 返回值类型
{
  扩展的操作
  return 返回值类型变量
}



3 . 函数扩展示例解析 : 集合的高阶函数 maxBy 就是对 Iterable 类型的函数胡扩展 ;



① 声明泛型 : 其中 <T, R : Comparable> 是声明泛型 ;


② 需要扩展函数类型 : Iterable 是要扩展函数的类型 ( 为该类扩展函数 ) ;


③ 扩展函数名称 : maxBy 是扩展的函数名称 ;


④ 函数参数 : selector: (T) -> R 是扩展函数的参数 , 该参数类型是函数类型 ;


⑤ 扩展函数返回值 : T? 类型 , 后面的 ? 表示该参数不能为 空 ;


⑥ 方法体 : 在方法体中调用传入的函数类型 , 获取元素中符合 selector(T) 调用返回值 最大值的元素 ;


/**
 * Returns the first element yielding the largest value of the given function 
 * or `null` if there are no elements.
 * 
 * @sample samples.collections.Collections.Aggregates.maxBy
 */
public inline fun <T, R : Comparable<R>> Iterable<T>.maxBy(selector: (T) -> R): T? {
    val iterator = iterator()
    if (!iterator.hasNext()) return null
    var maxElem = iterator.next()
    if (!iterator.hasNext()) return maxElem
    var maxValue = selector(maxElem)
    do {
        val e = iterator.next()
        val v = selector(e)
        if (maxValue < v) {
            maxElem = e
            maxValue = v
        }
    } while (iterator.hasNext())
    return maxElem
}



III . Kotlin 属性扩展


1 . 属性扩展作用 : Kotlin 中的函数 / 属性 扩展 , 可以为任意定义好的类 , 扩展任意函数或属性 ;



2 . 属性扩展格式 : 为一个定义好的类在外部定义一个新的属性 , 为 T 类型定义新的属性 , 使用如下格式扩展函属性 ;


var <被扩展属性类型> 要扩展属性的类型<被扩展的属性类型>.被扩展的属性名称 : 被扩展的属性类型
  //下面是被扩展属性的 getter 和 setter 方法
  get(){
  return 
  }
  set(value){
  }


目录
相关文章
|
9天前
|
XML 编译器 Android开发
Kotlin DSL 实战:像 Compose 一样写代码
Kotlin DSL 实战:像 Compose 一样写代码
72 0
|
9天前
|
Kotlin
Kotlin - 标准函数(with、run和apply)
Kotlin - 标准函数(with、run和apply)
7 1
|
9天前
|
安全 Swift Android开发
构建移动应用:Swift vs Kotlin —— 两大主流语言的对决
【5月更文挑战第11天】Swift与Kotlin在移动应用开发中各有优势。Swift是iOS开发的首选,以其简洁语法、高性能和类型安全著称;而Kotlin是Android的官方推荐语言,以其与Java的无缝互操作、空安全特性和简洁代码受到青睐。两者在语法简洁性、性能和社区支持上表现优秀,但平台兼容性不同。开发者应根据项目需求和目标平台选择合适的语言。
|
9天前
|
移动开发 Java Android开发
Android应用开发:Kotlin语言的优势与实践
【5月更文挑战第7天】 在移动开发的世界中,Android平台的Kotlin语言以其高效、简洁的语法和强大的功能吸引了众多开发者。本文将深入探讨Kotlin语言的核心优势,并通过实际案例展示如何在Android应用开发中有效地运用这一现代编程语言。我们将从语言特性出发,逐步分析其在提升开发效率、改善代码质量以及增强应用性能方面的具体表现,为读者提供一个全面而细致的Kotlin应用开发指南。
|
9天前
|
IDE Java 开发工具
开发语言漫谈-kotlin
Kotlin是一个岛屿的名字,全称是Kotlin Island
|
9天前
|
Java Android开发 C++
Kotlin vs Java:选择最佳语言进行安卓开发
【4月更文挑战第13天】Java曾是安卓开发的主流语言,但Kotlin的崛起改变了这一局面。Google在2017年支持Kotlin,引发两者优劣讨论。Java以其成熟稳定、强大生态和跨平台能力占优,但代码冗长、开发效率低和语言特性过时是短板。Kotlin则以简洁语法、空安全设计和高度兼容Java脱颖而出,但社区和生态系统仍在发展中,可能存在学习曲线和性能问题。选择语言应考虑项目需求、团队熟悉度、维护性、性能和生态系统。无论选择哪种,理解其差异并适应新技术至关重要。
|
8月前
|
IDE Java 编译器
Kotlin属性访问器与方法签名冲突的问题
Kotlin属性访问器与方法签名冲突的问题
57 0
|
5月前
|
Java 测试技术 持续交付
百度搜索:蓝易云【NetMock简介:简化 Java,Android和Kotlin多平台中的HTTP请求测试?】
使用NetMock,您可以在单元测试、集成测试和端到端测试中轻松地模拟和验证HTTP请求和响应,而无需实际发送请求到外部服务。这样可以提高测试的可靠性和可控性,并加快测试执行的速度。无论是在开发过程中还是在持续集成环境中,NetMock都可以帮助您更轻松地进行HTTP请求测试,提高代码质量和稳定性。
43 1
|
5月前
|
Kotlin
kotlin获取属性注解
kotlin获取属性注解
58 0
|
7月前
|
Cloud Native Go Kotlin
Kotlin 环境下解决属性初始化问题
Kotlin 环境下解决属性初始化问题
32 0