首页 > 其他分享 >当我再次用Kotlin完成五年前已经通过Kotlin完成的项目后

当我再次用Kotlin完成五年前已经通过Kotlin完成的项目后

时间:2023-05-07 13:55:04浏览次数:35  
标签:index val point Kotlin 五年 value points 完成

  > 近日来对Kotlin的使用频率越来越高, 也对自己近年来写过的Kotlin代码尝试进行一个简单的整理. 翻到了自己五年前第一次使用Kotlin来完成的一个项目([贝塞尔曲线](https://juejin.cn/post/6844903556173004807)), 一时兴起, 又用发展到现在的Kotlin和Compose再次完成了这个项目. 也一遍来看看这几年我都在Kotlin中学到了什么.
关于贝塞尔曲线, 这里就不多赘述了. 简单来说, 针对每一个线段, 某个点到两端的比例都是一样的, 而贝塞尔曲线就是这个过程的中线段两端都在同一位置的线段(点)过程的集合.
如图, AD和AB的比例, BE和BC的比例还有DF和DE的比例都是一样的.这个比例从0到1, F点的位置连成线, 就是ABC这三个点的贝塞尔曲线.
![Bezier](https://clwater-obsidian.oss-cn-beijing.aliyuncs.com/img/449809-20191009163226592-1802036977.png)

# 两次完成的感受
虽然时隔五年, 但是对这个项目的印象还是比较深刻的(毕竟当时找啥资料都不好找).
当时的项目还用的是Kotlin Synthetic来进行数据绑定(虽然现在已经被弃用了), 对于当时还一直用findViewById和@BindView的我来说, 这是对我最大的惊喜. 是的, 当时用Kotlin最大惊喜就是这个. 其它的感觉就是这个"语法糖"看起来还挺好用的. 而现在, 我可以通过Compose来完成页面的布局. 最直观的结果是代码量的减少, 初版功能代码(带xml)大概有800行, 而这次完成整个功能大概只需要450行.
在使用过程中对"Compose is function"理念的理解更深了一步, 数据就是数据. 将数据作为一个参数放到Compose这个function中, 在数据变化的时候重新调用function, 达到更新UI的效果. 显而易见的事情是我们不需要的额外的持有UI的对象了, 我们不必考虑UI中某个元素和另一个元素直接的关联, 不必考虑某个元素响应什么样的操作. 我们只需要考虑某个Compose(function) 在什么样的情况下(入参)需要表现成什么样子.
比如Change Point按钮点下时, 会更改`mInChange`的内容, 从而影响许多其它元素的效果, 如果通过View来实现, 我需要监听Change Point的点击事件, 然后依次修改影响到的元素(这个过程中需要持有大量其它View的对象). 不过当使用Compose后, 虽然我们仍要监听Change Point的点击事件, 但是对对应Change Point的监听动作来说, 它只需要修改`mInChange`的内容就行了, 修改这个值会发生什么变化它不需要处理也不要知道. 真正需要变化的Compose来处理就可以了(可以理解为参数变化了, 重新调用了这个function)
特性的部分使用的并不多, 比较项目还是比较小, 很多特性并没有体现出来.
最令我感到开心的是, 再一次完成同样的功能所花费的时间仅仅只有半天多, 而5年前完成类似的功能大概用了一个多星期的时间. 也不知道我和Kotlin这5年来哪一方变化的更大

标签:index,val,point,Kotlin,五年,value,points,完成
From: https://www.cnblogs.com/clwater/p/17379236.html

相关文章

  • kotlin学习
    kotlin方法一般不能接受空值,硬加能接受空值就必须加? funmethod(value:String?){println(value)}varnums=1..100表示1到100的数组varnums1=1until100表示1到99的数组for(ainnumsstep2){println(a)}会显示13579  step表示跳几个元素  nums.......
  • EBS:WIP工单完成日期来源
    在按规则做工单资料插入工单接口表(WIP.wip_job_schedule_interface),用户要求设置完成日期,没有要求工单的开始日期,用户测试时反映完成日期不是资料上的建议完成日期,经过多测试有些日期是建议的完成日期,有些不是,有时差两天,有时差一天。这是什么原因呢?咨询好些元老,他们不知道,因此,我......
  • 利用 captcha 模块完成验证码图片生成
    生成单张验证码图片并显示fromcaptcha.imageimportImageCaptchaimportmatplotlib.pyplotaspltimportnumpyasnpimportrandomimportstring#characters为验证码上的字符集,10个数字加26个大写英文字母#0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZstr类型characters=......
  • Angular4_支持多选,分组,自动完成,带图标,清理输入框可配置的select
    Angular4_支持多选,分组,自动完成,过滤,带图标,清理输入框可配置的select效果图DocumentationUsageInstall ngx-select-ex through npm packagemanagerusingthefollowingcommand:npmingx-select-ex--saveForusagewithAngular4installusingthefollowingcomman......
  • 如何使用ChatGPT在1天内完成毕业论文
    ​ 如何使用ChatGPT在1天内完成毕业论文几天前,亲眼见证了到一位同学花了1天时间用ChatGPT完成了他的毕业论文,世道要变,要学会使用黑科技才能混的下去。废话到此结束,下面说明这么用AI生成自己的论文。使用工具:1.Prompt框架学习:https://github.com/prompt-engineering/prompt-......
  • 当我第一次通过Kotlin和Compose来实现一个Canvas时, 我收获了什么?
    当我第一次通过Kotlin和Compose来实现一个Canvas时,我收获了什么?自从2019年Google推荐Kotlin为Android开发的首选语言以来已经经历了将近四年的时间,Compose的1.0版本也发布了将近2年的时间,Kotlin+Compose在现阶段的Android开发过程中还远远达不到主流的程度.我们是否应该......
  • vicky自己都看不懂的FFT&NTT&FWT(目前只完成FFT部分
    打个广告QwQ对应的FFT洛谷blog链接对应的csdn博客链接个人觉得洛谷的观感最好。不忘历史八百年前学了\(\text{FFT}\),因vicky过于垃圾,遂放弃。七百年前重拾\(\text{FFT}\),勉强搞懂了它的递归写法,因vicky再一次懒癌附体,遂连板题都没写就弃疗了。历史的今天(是今天才怪),vick......
  • .net core使用miniExcel完成简单excel的导入和导出功能
    今天学习了miniExcel,并通过它实现了一个简单的上传和导出的功能导入比较简单:publicIActionResultImportExcel(){varfile=HttpContext.Request.Form.Files[0]; //获取上传的文件信息varstream=newMemoryStream();//新建内存流......
  • Kotlin进阶指南 - 单元测试
    为了减少一些功能繁琐的测试流程,单元测试是提升开发效率的有效方式之一在早些年的时候我有记录过一篇Android使用单元测试,只不过当时更多的针对Java方面的单元测试;在使用Kotlin后,我发现单元测试有点不同,好像又没什么改变,故此直接记录一篇针对Java、Kotlin都可以使用的......
  • Kotlin基础入门 - 创建、兼容一个属于自己的Kotlin项目
    这应该是我年前就想记录的一个基础入门,但是因为一直比较忙,当时只是做了一个备忘草稿,正文就拖到了现在,趁着有时间,赶紧来帮助一下新入行的朋友…关于为何我把这篇Blog叫做创建、兼容一个属于自己的Kotlin项目?主要是因为在实际开发中会遇到以下俩种项目场景><从0-1的Kot......