首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

KOTLIN:重构一个大的return when条件子句和另一个子句

Kotlin是一种现代化的静态类型编程语言,它运行在Java虚拟机上并且可以与Java代码无缝互操作。Kotlin提供了许多特性和语法糖,使得开发者能够更加高效地编写代码。

在Kotlin中,可以使用when关键字来实现类似于Java中的switch语句的功能。when语句可以用于对一个表达式进行多个条件的匹配,并根据匹配结果执行相应的代码块。

当需要重构一个大的return when条件子句和另一个子句时,可以考虑使用Kotlin中的sealed classwhen表达式的组合来实现更清晰和可维护的代码。

首先,可以创建一个sealed class,该类作为一个父类,包含所有可能的条件子句作为子类。每个子类代表一个具体的条件,并可以包含相应的逻辑代码。

代码语言:txt
复制
sealed class Result {
    object Condition1 : Result()
    object Condition2 : Result()
    object Condition3 : Result()
    // 添加更多的条件子类...
}

然后,在需要重构的代码中,可以使用when表达式来替代原来的大的return when条件子句。每个条件子句都可以使用相应的子类进行匹配,并执行相应的逻辑代码。

代码语言:txt
复制
fun getResult(): Result {
    val condition = // 获取条件的逻辑
    return when (condition) {
        // 匹配条件1
        "condition1" -> Result.Condition1
        // 匹配条件2
        "condition2" -> Result.Condition2
        // 匹配条件3
        "condition3" -> Result.Condition3
        // 添加更多的条件...
        else -> throw IllegalArgumentException("Invalid condition")
    }
}

通过使用sealed classwhen表达式的组合,可以将原来的大的return when条件子句拆分为多个小的条件子句,使得代码更加清晰和易于维护。

在腾讯云的产品中,与Kotlin相关的推荐产品是腾讯云函数计算(SCF)。腾讯云函数计算是一种事件驱动的无服务器计算服务,可以让您无需管理服务器即可运行代码。您可以使用Kotlin编写函数计算的代码,并将其部署到腾讯云函数计算中。您可以通过以下链接了解更多关于腾讯云函数计算的信息:

腾讯云函数计算产品介绍:https://cloud.tencent.com/product/scf

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Kotlin实战【五】Kotlin异常

二、“try”、“catch”、“finally” 就像Java之中,可以用try结构,catchfinally子句处理异常。...e) { return null } finally { reader.close() } } 从对比中我们可以看出kotlinJava最大不同是不需要throws...在java中,这种异常必须显示处理,必须声明你函数可能抛出所有受检异常。 如果调用另一个函数,需要处理这个函数受检异常,或者声明你函数可能抛出这些异常。...(StringReader("not a number")) readNumber(reader)//没有打印任何数字 Kotlin中try关键词,就像ifwhen,引进了个表达式,你可以把它值赋值给个变量...如果捕获到个异常,那么cache代码块中最后个表达式就是结果。 四、总结 1、kotlin异常处理java处理相似,除了Kotlin不要求你声明函数可以抛出异常。

2.1K40

存储过程之流程控制语句

LOOP循环(死循环) LEAVE语句(离开) ITERATE语句:迭代,再次循环     RETURN语句:返回 注意:MySQL不支持FOR循环 条件控制:if语句、case...例2:创建过程,表示出players表penalties表哪个行数更多—>IF条件中允许包含标量子查询 mysql> create procedure `TENNIS`....[ELSE statement_list] END CASE case_value是个表达式,该值每个when子句when_value值进行相等比较:   ①如果某个when子句when_value...[ELSE statement_list] END CASE 对于每个when子句,判断后面的布尔表达式search_condition是否为true:   ①如果某个when子句条件为true,则执行相应...then子句后面的语句statement_list;   ②如果所有的when子句条件都不为true,则执行else后面的语句statement_list。

47120
  • 追随 KotlinScala,看 Java 12-15 现代语言特性

    相当于只支持值匹配 Kotlin when 表达式/Scala match 表达式。...非常像,只是目前只支持简单值匹配,还不支持 Kotlin when is/in 以及 Scala match 模式匹配。...switch 表达式优点不仅是简洁且具有返回值,还避免了传统 switch 语句些坑(如忘记写 break 语句,再如各 case/default 子句共享同个局部作用域)。...Java 文本块起始三重双引号后只能跟空白符换行,因此不能像 Kotlin/Scala 那样写 """hello""",而必须这样写: """ hello""" Java 会自动去掉第个换行以及每行末尾空白...文本块另一个用途是便于书写预排版文本,例如 ASCII Art 或者竖排文字: String ci = "┆蝶┆觀┆月┆池┆遊┆ ┆獨┆錢┆古┆來┆端┆\n" + "┆自┆音┆老┆畔

    1.3K20

    神奇 SQL 之 HAVING → 容易被轻视主角

    ,当然就报错了啦     细心小伙伴应该已经发现,HAVING 子句构成要素包含 GROUP BY 子句 SELECT 子句构成要素是,都是只能包含 常数 、 聚合函数 聚合键...  我们发现,聚合键所对应条件既可以写在 HAVING 子句当中,也可以写在 WHERE 子句当中   虽然条件分别写在 HAVING 子句 WHERE 子句当中,但是条件内容,以及返回结果都完全相同...语义更清晰     WHERE 子句 HAVING 子句作用是不同;前面已经说过,HAVING 子句是用来指定“组”条件,而“行”所对应条件应该写在 WHERE 子句中,这样来,写出来...,与在 WHERE 子句中指定条件比起来,需要排序数量就会多得多     另外,索引是 WHERE 根据速度优势另一个有利支持,在 WHERE 子句指定条件所对应列上创建索引,可以大大提高 WHERE...SQL 面向集合特性最为有效方法   2、HAVING 子句要素     3 个要素:常数、聚合函数 聚合键     HAVING 大多数情况下结合 GROUP BY 来使用,但不是定要结合

    94820

    SQL 中 HAVING 魅力,多数人容易忽略

    当然就报错了啦 细心小伙伴应该已经发现,HAVING 子句构成要素包含 GROUP BY 子句 SELECT 子句构成要素是,都是只能包含 常数 、 聚合函数 聚合键 HAVING...我们发现,聚合键所对应条件既可以写在 HAVING 子句当中,也可以写在 WHERE 子句当中 虽然条件分别写在 HAVING 子句 WHERE 子句当中,但是条件内容,以及返回结果都完全相同...WHERE 子句 HAVING 子句作用是不同;前面已经说过,HAVING 子句是用来指定“组”条件,而“行”所对应条件应该写在 WHERE 子句中,这样来,写出来 SQL 语句不但可以分清两者各自功能...,需要排序数量就会多得多 另外,索引是 WHERE 根据速度优势另一个有利支持,在 WHERE 子句指定条件所对应列上创建索引,可以大大提高 WHERE 子句处理速度 总结 1、集合论 集合论是...子句要素 3 个要素:常数、聚合函数 聚合键 HAVING 大多数情况下结合 GROUP BY 来使用,但不是定要结合 GROUP BY 来使用 3、SQL 执行顺序 WHERE 子句是指定行所对应条件

    1.1K50

    神奇 SQL 之 HAVING → 容易被轻视主角

    聚合后这个结果并没有 cname 这个列,那么通过这个列来进行条件处理,当然就报错了啦     细心小伙伴应该已经发现,HAVING 子句构成要素包含 GROUP BY 子句 SELECT...子句构成要素是,都是只能包含 常数 、 聚合函数 聚合键 HAVING 魅力   HAVING 子句是 SQL 里个非常重要功能,是理解 SQL 面向集合这本质关键。...我们发现,聚合键所对应条件既可以写在 HAVING 子句当中,也可以写在 WHERE 子句当中   虽然条件分别写在 HAVING 子句 WHERE 子句当中,但是条件内容,以及返回结果都完全相同...语义更清晰     WHERE 子句 HAVING 子句作用是不同;前面已经说过,HAVING 子句是用来指定“组”条件,而“行”所对应条件应该写在 WHERE 子句中,这样来,写出来...,需要排序数量就会多得多     另外,索引是 WHERE 根据速度优势另一个有利支持,在 WHERE 子句指定条件所对应列上创建索引,可以大大提高 WHERE 子句处理速度 总结   1、集合论

    1.1K20

    SQL基础--> 数据处理(DML、RETURNING、MERGE INTO)

    在INSERT 子句中随意列出列名和他们值。 字符日期型数据应包含在单引号中。 --查看emp表表结构 SQL> DESC emp; Name Null?...[WHERE condition]; 可以次更新多条数据。 使用WHERE 子句指定需要更新数据,如果省略WHERE子句,则表中所有数据都将被更新。...SQL> DELETE FROM emp WHERE empno = 1234; 1 row deleted. 2.在DELETE 中使用子查询 在DELETE 中使用子查询,使删除基于另一个表中数据...SQL> PRINT avg_salary; AVG_SALARY ---------- 2554.6875 十、MERGE INTO 将个表中行合并到另一个表中 MERGE INTO...ON 子句用于表之间连接 WHEN MATCHED THEN 子句指明当条件满足时则对目的表执行何种操作(此处是UPDATE操作) WHEN NOT MATCHED THEN 子句指明当条件不满足时对目的表执行何种操作

    85220

    高效sql性能优化极简教程

    但我们遇到性能问题时,要判断点就是“在这三种资源中,是否有哪种资源达到了有问题程度”,因为这点能指导我们搞清楚“需要优化重构什么”“如何优化重构它” ?...子句末尾性能最优 group by order by 子句执行顺序都为从左到右 select子句--少用*号,尽量取字段名称。...4,用where子句替换having子句 where子句搜索条件在进行分组操作之前应用;而having自己条件在进行分组操作之后应用。...15,批量提交sql 如果你需要在个在线网站上去执行个大DELETE或INSERT查询,你需要非常小心,要避免你操作让你整个网站停止相应。...所以,如果你有个大处理,你定把其拆分。

    3.3K50

    MyBatis官方文档-SQL 语句构建器类

    此时,MyBatis有另外个特性可以帮到你,在减少典型加号,引号,新行,格式化问题嵌入条件来处理多余逗号或 AND 连接词之前。事实上,在Java代码中来动态生成SQL代码就是场噩梦。...基于调用方法,添加新合适类型 JOIN子句。 参数可以包含由列命join on条件组合成标准join。 WHERE(String)``WHERE(String...)...插入新 WHERE子句条件, 由AND链接。可以多次被调用,每次都由AND来链接新条件。使用 OR() 来分隔OR。 OR() 使用OR来分隔当前 WHERE子句条件。...可以被多次调用,但在行中多次调用或生成不稳定SQL。 AND() 使用AND来分隔当前 WHERE子句条件。 可以被多次调用,但在行中多次调用或生成不稳定SQL。...插入新 GROUP BY子句元素,由逗号连接。 可以被多次调用,每次都由逗号连接新条件。 HAVING(String)``HAVING(String...) 插入新 HAVING子句条件

    1.1K20

    月之暗面Kimi代码分析能力评测

    最近打算重构下PawSQL优化引擎中OR条件SELECT重写优化策略代码,时间有点久,代码有点复杂,看到网上对新出了KIMI评价很高。于是尝试用它来理解下代码。...**重写替换**:重构查询会替换原始查询,这通过`QueryBlockHelper.replace`方法实现。审计结果会记录原始`WHERE`子句重写后查询。 8....**无聚合、无排序、无限制查询**: - 如果`QueryBlock`对象不包含聚合函数、没有排序子句、没有限制子句,并且不是聚合查询块,那么可以对`OR`条件进行重构。...- 通常,会创建个新`QueryBlock`对象,并复制原始查询选择列表`WHERE`子句。...这些示例展示了如何根据不同查询特点重构包含`OR`条件SQL查询,以提高查询性能效率。 评价:这部分KIMI表现就差了些,只有第个举例是正确

    13710

    OushuDB-PL 过程语言-控制结构

    随着 RETURN NEXT命令迭代执行,结果集最终被建立起来。该类函数调用方式如下: SELECT * FROM some_func(); 它被放在FROM子句中作为数据源使用。...LOOP LOOP定义个无条件循环,直到由EXIT或者RETURN语句终止。可选label可以由EXIT CONTINUE语句使用,用于在嵌套循环中声明应该应用于哪层循环。 2)....循环,在该循环中可以遍历命令结果并操作相应数据,见如下示例: PL/pgSQL还提供了另外种遍历命令结果方式,上面的方式相比,唯差别是该方式将SELECT 语句存于字符串文本中,然后再交由...种方式相比,该方式灵活性更 高,但是效率较低。...此时系统将搜索异常条件列表,寻 找匹配该异常条件,如果找到匹配,则执行相应handler_statements,之后再执行END条语句。

    2.5K20

    SQL 数据操作技巧:SELECT INTO、INSERT INTO SELECT CASE 语句详解

    INTO newtable [IN externaldb] FROM oldtable WHERE condition; 新表将按照在旧表中定义列名类型创建。您可以使用 AS 子句创建新列名。...SQL 语句使用 IN 子句将表复制到另一个数据库中新表中: SELECT * INTO CustomersBackup2017 IN 'Backup.mdb' FROM Customers; 以下...INSERT INTO SELECT 语法 将个表中所有列复制到另一个表中: INSERT INTO table2 SELECT * FROM table1 WHERE condition; 仅将个表中某些列复制到另一个表中...因此,条件为真,它将停止阅读并返回结果。如果没有条件为真,它将返回 ELSE 子句值。 如果没有 ELSE 部分并且没有条件为真,它将返回 NULL。...在这里,我们将探讨些处理 NULL 值 SQL 函数,包括 IFNULL()、ISNULL()、COALESCE() NVL()。

    55310

    算法工程师-SQL进阶:强大Case表达式

    、case表达式是什么 case 表达式是 SQL 里非常重要而且使用起来非常便利技术,我们常用它来描述条件分支。...这个例子技巧是:分组后将count(*)等聚合函数作为分支判断条件having筛选group有相似的作用,但是比having功能更强大是,case可以多层嵌套使用,在小组内部还可以使用case表达式进行分支过滤重构...在这个例子中,s1s2自连接后table应该有4*4=16行。 然后,GROUP BY s1.salary子句将table按s1.salary进行了分组,应该是分为了4组,每个小组都有4行。...需要注意是,如果降薪涨薪分两步操作,可能会产生逻辑问题。比如,先降薪,那有的员工降薪完,其薪资可能符合下步要涨薪范围,薪资又会涨回去了。咋办呢? ?...当case表达式用在having子句中,可以对小组设置灵活过滤逻辑; 当需要自定义排序顺序时,可以在order by中通过使用case表达式来实现; case表达式还可以应用在update中,根据不同分支条件采取不同更新策略

    2.3K20

    SQL谓词概述(

    在CREATE TRIGGER语句WHEN子句中确定何时应用触发操作代码。 谓词列表 每个谓词包含个或多个比较操作符,可以是符号,也可以是关键字子句。...%VALUE%KEY子句可以使用任何其他比较运算符。 LIKE - 使用文字通配符模式匹配条件。...%PATTERN - 使用字符类型模式匹配条件。例如,'1U4L1",".A'(1个大写字母,4个小写字母,个文字逗号,后跟任意数量字母字符)。...LIKE使用字段默认排序规则,默认情况下不区分大小写。 复合谓词 谓词是条件表达式最简单版本; 条件表达式可以由个或多个谓词组成。 可以使用ANDOR逻辑操作符将多个谓词链接在起。...不能使用OR逻辑操作符将引用表字段集合谓词与引用另一个表中字段谓词关联起来。

    1.2K20

    【MySQL 系列】MySQL 语句篇_DQL 语句

    也就是两个表中所有的行所有可能组合。这相当于内连接没有连接条件或者连接条件永远为真。 如果个有 m 行另一个有 n 行表,它们交叉连接将返回 m * n 行数据。...2.3、DQL 子句:WHERE 默认情况下,SELECT 查询数据表中所有行数。但我们只想查询满足条件数据,就要用到 WHERE 子句。...AND 运算结果为 0;④ 如果两个操作数中有个为 NULL,且另一个不为 0 (FALSE),则返回 NULL;⑤ 两个操作数前后顺序不影响 AND 操作符运算结果; ⑥ WHERE 子句...使用括号更改计算顺序;⑦ WHERE 子句 OR 连接两个比较条件,过滤那些至少满足其中个比较条件记录行。...GROUP BY 子句分组字段或表达式至少个,可以多个;③ 子句是可选,用来过滤分组数据,需要使用逻辑表达式作为条件,其中逻辑表达式中字段或表达式只能使用分组使用字段聚合函数。

    17810

    C#6.0 新增功能

    当在 catch 或 finally 子句中执行代码引发异常时,执行将在下个外层块中查找合适 catch 子句。 如果存在当前异常,则该异常将丢失。...catch finally 子句 awaited 表达式也会发生同样情况:搜索合适 catch,并且当前异常(如果有)将丢失。...鉴于此行为,建议仔细编写 catch finally 子句,避免引入新异常。 10 使用索引器初始化关联集合 索引初始值设定项是提高集合初始值设定项与索引用途致性两个功能之。...11 集合初始值设定项中扩展 Add 方法 使集合初始化更容易另一个功能是对 Add 方法使用扩展方法。 添加此功能目的是进行 Visual Basic 奇偶校验。...编译器添加个时间戳个随机生成 GUID。 如果想按字节比较输出以确保各项生成之间致性,请使用此选项。

    1.7K20

    Merge into使用详解-你Merge了没有「建议收藏」

    在Oracle 10g中MERGE有如下些改进: 1、UPDATE或INSERT子句是可选 2、UPDATEINSERT子句可以加WHERE子句 3、在ON条件中使用常量过滤谓词来insert...所有的行到目标表中,不需要连接源表目标表 4、UPDATE子句后面可以跟DELETE子句来去除些不需要行 我们通过实例来一一看看如上新特性 1....UPDATEINSERT子句可以加WHERE子句 这也是个功能性改进,能够符合我们更多需求,这个where作用很明显是个过滤条件,是我们加入些额外条件,对只对满足where条件进行更新和...UPDATE子句后面可以跟DELETE子句来去除些不需要行 delete只能update配合,从而达到删除满足where条件子句纪录 merge into products p using...merge into也是个dml语句,其他dml语句样需要通过rollbackcommit 结束事务。

    1.3K10

    开源 | 携程机票跨端 Kotlin DSL 数据库框架 SQLlin

    MMKV-Kotlin 研发过程些常见问题。...而 DELETE SELECT 则接收 WHERE 子句来完成整条 SQL 语句构建。此外,UPDATE SELECT 语句可以连续连接多个子句, 这些多子句连接也是通过中缀函数来实现。...ClauseElement 表示数据库列名,而 ClauseCondition 则表示条件条件通常会用在 WHERE HAVING 子句中。...使用 val 声明属性用于在条件语句中表示列名,而使用 var 声明则是 SetClause 扩展属性,用于在 SET 子句中设置个新值。...但 SQLlin 开发仍未结束,它目前仍然有些不足,例如它还有如下功能不支持: (1)不支持子查询,包括不支持条件语句中子查询 JOIN 子查询。

    1.7K40

    SQL命令 CREATE TRIGGER(

    Action参数可以包含各种可选关键字子句,包括(按顺序):For Each子句;带有控制触发操作执行谓词条件WHEN子句;以及指定Language SQL或Language OBJECTSCRIPT...此触发器类型是使用FOR EACH子句指定。行级触发器是默认触发器类型。 通常,触发触发器代码会对另一个表或文件执行操作,例如执行日志记录操作或显示消息。触发触发器不能修改触发记录中数据。...CREATE TRIGGER语句获取TABLE表级锁。这可以防止其他进程修改表数据。此锁在创建触发器操作结束时自动释放。 若要创建触发器,表不能在独占模式或共享模式下被另一个进程锁定。...个可选WHEN子句,由WHEN关键字括在括号中谓词条件(简单或复杂)组成。 如果谓词条件计算结果为TRUE,则执行触发器。 当语言为SQL时,才能使用WHEN子句。...WHEN子句可以引用oldalias或newalias值。 个可选LANGUAGE子句,可以是LANGUAGE SQL或LANGUAGE OBJECTSCRIPT。

    2K30
    领券