Kotlin 中文社区论坛

Posted Kotlin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin 中文社区论坛相关的知识,希望对你有一定的参考价值。

点击阅读原文获取文中链接哦~


自从 Kotlin 被 google 选中为 android 官方编程语言之一,业内的关注度就一直在上升。

本着创建社区、回馈社区这一理想,这里向大家隆重介绍我们的中文论坛 kotliner.cn

中文论坛旨在提供问答版和精品专题。

你可以在这里提问,发表最新的Kotlin学习见解,也可以订阅最新最好的Kotlin学习专题资料。

中文论坛服务 使用 Kotlin 编写构建,并托管在 Github,前端使用了时下最火的框架 Vue.js

1. 从Android开发到Kotlin中文论坛

笔者曾有过半年多使用 Kotlin 开发 Android 经验。起初接触到 Kotlin 时,这门语言并没有出 release 版本,但它仍然牢牢地抓住了我的眼球。

Kotlin 为我们带来了太多优秀的高级语法: 更优雅的函数编程,更精简的函数拓展,更好用的泛型,短小精悍的数据类等等。因其相对Android开发时使用的java6语法的种种优良特性,被业内称之为“Java6废土上的一线希望”。

相信不少使用Kotlin的同学都一定知道知乎上这个有名的问题:

【Kotlin 作为 Android 开发语言相比传统 Java 有什么优势?】

其中不乏优秀的回答,在这里笔者就不再赘述了。

而创建Kotlin中文论坛的初衷, 在于知乎上一个几乎同样的问题:

【Kotlin作为服务器端开发语言与Java相比会如何?】

当人们将眼光从单纯的Android业务开发中解放出来,去探讨一个语言的定位的时候,才是真正去思考这门语言定位的时候。

Kotlin作为服务端开发是可行的。

相较于java,它提供了更多的一些高级语法特性(非空检测,智能类型判断等),在对语言充分掌握的情况下一定能降低开发成本和错误率。

在笔者看来,新事物出现是必然的、客观的规则, 一方面有些人会顾虑新事物所造成的革新会颠覆自己过去的认知,一方面会有些人大胆的去接受这些新事物并一探究竟。于是我决定就用这门语言去做一个论坛(使用的基本都是传统javaEE库), 用最简单的最原始的方式来证明这个语言是完备的。并不脱离于现有的java体系, 而是更好的依附在其之上.

为此,笔者愿和群里大佬一同亲自去实践一波,去编写一个kotlin in product的论坛。一方面,我们能为新兴的中国 Kotlin 社区贡献一片创作的热土。另一方面,我们也想借此表达Kotlin这门语言的优势不仅仅在于Android开发,整个互联网产业之下都是其用武之地。

Kotlin China 使用了分布式微服务架构来实现模块解耦。对其结构感兴趣的同学的可以参看【Kotlin CN 服务端结构简述】,本文解释了一些简单的概念,以及该项目服务所用到的框架模型。

2. Kotlin为我们带来了什么

相信感受过Kotlin的同学都应该深有感触,Kotlin为我们带来了太多高级语言特性。以至于允许你在繁杂的 Android 业务开发中,即使不依赖第三方库也能写更优雅的代码。而这时传统java开发中很难想象到的场景

比如在Android开发中使用Kotlin异步发送HTTP请求

 Req.get<ExactlySearchRoomInfo>(API.ROOM, "/rooms/$keyword" 
 ).send(param = { 
     it["longitude"] = location.longitude 
     it["latitude"] = location.latitude 
 }, success = { _, resp -> 
     starter.next(listOf(RoomInfoWrapper(resp))) 
 }, fail = { _, _ ->  
     starter.next(emptyList())   }) 

使用Kotlin代理实现的属性绑定

 class UserNameTitleLayout : RelativeLayout { 
   
     val mUserTag: ImageView by bind(R.id.image_tag, comment = "用户标签") 
     val mUserNick: TextView by bind(R.id.user_page_nick, comment = "用户昵称") 
     val mAge: TextView by bind(R.id.age_text, comment = "用户年龄") 
     val mLocationIcon: View by bind(R.id.user_page_location_icon, comment = "定位标记") 
   
     //... 
 } 

直接使用SQL语句替代复杂的ORM框架进行开发

 """ --查询私聊消息-- SELECT m.*, a.* FROM message as m LEFT JOIN im_user as a ON a.uid=m.target WHERE m._owner=? AND m.group_id=0 AND m.status<>${IMMsg.Status.DELETE} AND m.target=? """.queryList(db, { cursor -> 
     IMMsg().apply { 
         this.status = cursor int "status" 
         this.seqNum = cursor str "seqnum" 
         this.target = IMUserInfo().apply { 
             this.uid = cursor long "uid" 
             this.nick = cursor str "nick" 
             this.logoURL = cursor str "logo_url" 
             this.sex = cursor int "sex" 
             this.birthday = cursor str "birthday" 
         } 
         this.type = cursor int "type" 
         this.content = cursor str "content" 
         this.date = cursor long "date" 
         this.fromChannel = cursor int "from_channel" 
         this.tips = cursor str "tips" 
     } 
 }, /*_owner*/owner, /*target*/id) 

以上只是举出了几个简单的例子,并没有完全枚举这门语言的特性,仅供抛砖引玉。

有人说 Kotlin 是为 Android 而生的一门语言,这并不正确。它提供了大量优秀的语法特性,这些特性即使在服务端平台开发中,也能彰显其价值。

比如我们常用的mybatis,可以彻底告别肮脏的xml解析语法了

 interface ProfileMapper { 
   
    @Select(""" 
    SELECT * FROM profile 
    WHERE uid = #{uid} 
    LIMIT 1 
    """) 
    fun getById(uid: Long): Profile? 
 } 

又比如我们可以用简单易读的lambda函数,来使用数据库事务

 //注册事务 
 mysql.write { 
   var user = UserInfoDao.getByName(it, req.username) 
   if (user != null) abort(Err.USER_NAME_EXISTS) 
   
   user = UserInfoDao.getByEmail(it, req.email) 
   if (user != null) abort(Err.USER_EMAIL_EXISTS) 
   
   AccountDao.saveOrUpdate(it, account) 
   UserInfoDao.saveOrUpdate(it, userInfo) 
   //绑定github账号 
   if (req.githubUser.id != 0L) { 
       req.githubUser.uid = account.id 
       GitHubUserInfoDao.saveOrUpdate(it, req.githubUser) 
   } 
 } 

当然这些都是从语法层面上来描述它所带来的新事物,能让它作为服务端开发的最主要的原因,还是在它和java语言几乎绝对的兼容性。

开发过程中有时甚至完全意识不到这是一门新语言,更多的会去想这是一套更强大的java语法糖套件,并很容易使用上瘾。

3. 关于我们和Kotlin China社区

我们是来自全国各地的 Kotlin 爱好者

社区论坛: https://kotliner.cn

社区博客: https://www.kotliner.cn

中文站: https://www.kotlincn.net


以上是关于Kotlin 中文社区论坛的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Kotlin 片段内的按钮之间切换片段?

如何在kotlin的片段内显示网格视图?

kotlin-从一个片段更改多个片段的小数位

在片段中单击按钮播放声音(Kotlin)[重复]

如何在kotlin中从一个片段转到另一个片段?

使用 Kotlin 更改片段中的按钮背景