Kotin 不错,但它只不过是C#的模仿者

简介

kotlin 是不是最近很火热,有Google爸爸的加持之下, 感觉Kotlin如日中天?

很抱歉, 其实从一个开发人员的眼界里来看, Kotlin其实真的没有那么牛逼,可能是有一点过誉了.

它本质上,还是在模仿C#, 而C# 甚至还有LINQ这样牛逼的特性 . 更不用说现在.net已经开源, 免费使用. C#还有自己独立的VM, kotlin还没有自己的运行时, 它还只能依附于JVM生态上吸血.

 

我个人其实觉得Jetbrains公司, 没有自己的VM, 而又不积极去推进JVM生态体系建设,反而自己自立门户,这样的手段,感觉到不是很光彩.

我是正统Java, JDK,JVM的坚定支持者.


 

Kotlin 跟C# 到底有多像?

# Kotlin
println("Hello, world!")

#C#
public void Main() 
{
    Console.WriteLine("Hello, world!");
}
----

# Kotlin
var myVariable = 42
myVariable = 50

val myConstant = 42

# C#
var myVariable = 42;
myVariable = 50;

----

# Kotlin
val age = 42

if (age < 10) {
    println("You're too young to watch this movie")
} else if (age < 13) {
    println("You can watch this movie with a parent")
} else {
    println("You can watch this movie")
}

# C#
var age = 42;

if (age < 10) 
{
    Console.WriteLine("You're too young to watch this movie");
} 
else if (age < 13) 
{
    Console.WriteLine("You can watch this movie with a parent");
} 
else 
{
    Console.WriteLine("You can watch this movie");
}

----

# Kotlin
fun greet(name: String, day: String): String {
    return "Hello $name, today is $day."
}

val text = greet("Bob", "Tuesday")
// Hello Bob, today is Tuesday

# C#
string Greet(string name, string day)
{
    return $"Hello {name}, today is {day}";
}

var text = Greet("Bob", "Tuesday");
// Hello Bob, today is Tuesday
----

# Kotlin
fun transform(initial: String, f: (String) -> String) = f(initial)

val result = transform("hello", { x -> x.toUpperCase() })
// Trailing lambda can be placed outside the parentheses
val result2 = transform("hello") { x -> x.toUpperCase() }
// HELLO

# C#
string Transform(string initial, Func<string, string> f) => f(initial);

var result = Transform("hello", x => x.ToUpper());
// HELLO

----
# Kotlin
// Kotlin doesn't have tuples, use data classes
data class GasPrices(val a: Double, val b: Double, val c: Double)

fun getGasPrices() = GasPrices(3.59, 3.69, 3.79)

val prices = getGasPrices();

val (a, b, c) = getGasPrices();

# C#
(double a, double b, double c) GetGasPrices() => (3.59, 3.69, 3.79);

var result = GetGasPrices();

var (a, b, c) = GetGasPrices();

 

你 可能会觉得, Kotlin我是独立设计的,说什么抄袭呢? 你要知道, C# 现在已经出来第9代了.

这些理念和设计, kotlin 落后了一二十年才出来. 你踩着前人走过的坑,继续踩一遍,你还好意思说自己原创?

 

编程语言,如果说跟咱们武林门派相比: 武当派咱就是C#, Java那就是少林派. Kotlin, 那就星宿派吧.

 

武当少林, 都是武林中大门派, 开宗立派, 山门打开, 广收门徒,受万人敬仰.

Kotlin 的问题 在于什么:

  1. 它目前还是一个商业公司独裁的研发状态, 核心Leader是Jetbrains 的团队leader
  2. 它的特性研发, 都是官方掌控,官方贴一个设计文档,然后就这么撸了, 你没有办法阻止它,或者让它干什么
  3. 迭代演进太快了, 跟前端技术一样,一个星期能给你几个迭代出来. 过了一两个月,你就完全懵逼, 瞎叽霸改什么玩意?
  4. 抄袭其他语言的特点比较多, 但是没有抄到精髓, 学,而不像, 画虎不成反似猫.
  5. 设计能力很差, 没有其他语言那种能画龙点睛,令人叹为观止的设计
  6. 没有解决业务开发的问题, 反而制造更多问题, 为了解决设计的问题,又强行加戏,带来更多的问题
  7. 最终坑害的是学这个语言,并试图把这个语言投产的 开发者, 公司
  8. 未来不明显,不明确, 没有加入一个能够持续发展的开源基金会, 哪怕是Apache, Eclipse,Linux 基金会, CNCF等任何一家
  9. 官方对开发者,社区,扶持力度不够, 对开发者需要的生态,支持力度不够,
  10. 对上游JVM,JDK 索取多, 回馈少. 作为一门依赖于JDK体系的语言, 你闷头发展自己的技术,而不想着回馈给上游,我就觉得你这个项目,没有那么伟大

 

给所有喜欢Kotlin的开发者,一个忠告:

  1. 如果你是为了吃饭, 那么Java 永远是你可以信赖的伙伴,它有着严谨的开发,技术规范,不会随便折腾. 大企业,生态体系都不会乱来, 稳定,可控
  2. 如果你不怕, 那么不要随便升级最新的kotlin , 因为新版小白鼠没有那么多, 上车快,意味着bug多, 不稳定的因素多. 生产环境最怕什么,最怕 各种奇葩的问题. 而且你不是kotlin核心团队,很多奇怪的问题,定位,修起来不是那么好修, 你不得不退回之前一个稳定的版本,而为了找到一个稳定的版本,你会需要花更多的精力去定位问题, 测试问题
  3. 如果有能力, 请关注kotlin的开发进展, 对他们的特性增加,减少,废弃特性, 提出自己的意见,建议, 也让他们知道, 社区是有意见,建议的, 他们不可以为所欲为.随便乱改
  4. 如果有能力, 也请多支持, 比如贡献开源类库, 帮助建设kotlin生态体系, 现在Kotlin生态体系还很薄弱, 类库支持还比较少一些, 当然,可以调用java原生的lib,但是kotlin自己的生态不是那么完善.

对于那些犹豫不决的开发者, 我觉得大家可以考虑下更成熟后的语言. 比如C#, Java, 如果你公司业务没这么庞大, 那么PHP, Ruby on Rails, Python 也可以考虑考虑.

 

移动端开发,选择就没那么多, 老实本分的 Java其实挺好的. 我觉得Java 8 可以再写个二十年.

只要谷歌脑子不抽风, 我觉得都挺好的.

 

预测一下稳定的 Kotlin, 估计要等到3代以后, 期待kotlin 3. 因为这第一代的kotlin, 老实说,很多设计都是非常仓促, 问题是比较多的. 官方的更新迭代也是非常剧烈

完全是出于一个失控的状态.

学kotlin的这几年,吃尽了不少苦头, 也有了这篇文章. 好了, 我该说的都说完了, kotlin的铁粉们,可以来喷我了.

 

如果你们没有被kotlin 殴打过, 别告诉我你是kotlin 的铁粉.

 

没有踩过十次以上坑的, 别来跟我说你更懂kotlin, 因为你连kotlin的门都没摸到, 还不知道它有哪些不足, 发展过程中, 有哪些坑.

分类: 编程语言 标签: C# Kotlin 编程语言 发布于: 2020-12-27 12:59:04, 点击数: