C# vs Kotlin

Dalam hal gula dan fitur mewah dalam bahasa pemrograman, C # dan Kotlin adalah salah satu opsi pertama yang dipikirkan. Karena kedua bahasa ini menempati ceruk yang serupa, yaitu, mereka diketik dengan kuat, sampah dikumpulkan, lintas platform, digunakan baik di backend maupun dalam pengembangan seluler, hari ini kami akan mencoba membandingkan kemampuan sintaksisnya dan mengatur pemungutan suara kecil. Agar perbandingannya adil, kami akan mempertimbangkan versi terbaru dari kedua bahasa tersebut. Saya akan membuat reservasi tentang ketidakberpihakan saya: Saya sama-sama menyukai kedua bahasa, mereka terus berkembang dan tidak ketinggalan satu sama lain. Artikel ini adalah artikel perbandingan, bukan tutorial, jadi beberapa kemungkinan sintaksis biasa mungkin dihilangkan.





Mari kita mulai dari titik masuk

Dalam C # peran ini dimainkan oleh metode titik masuk Utama atau tingkat atas statis, misalnya





using static System.Console;

WriteLine("Ok");
      
      



Kotlin membutuhkan fungsi utama





fun main() = println("Ok")
      
      



Dari dua contoh kecil ini, pertama-tama, terlihat bahwa di Kotlin Anda dapat menghilangkan titik koma. Dengan analisis yang lebih dalam, kita melihat bahwa di C #, terlepas dari keringkasan titik masuk indikatif, metode statis di file lain masih perlu dibungkus dalam kelas dan diimpor secara eksplisit darinya ( menggunakan System.Console statis ), dan Kotlin pergi lebih jauh dan memungkinkan Anda membuat fungsi lengkap ...





Mendeklarasikan Variabel

Dalam C #, tipe ditulis di sebelah kiri, dan kata kunci baru digunakan untuk membuat instance. Ada kata khusus var, yang dapat menggantikan nama jenis di sebelah kiri. Namun, variabel dalam metode di C # tetap rentan terhadap penugasan ulang.





Point y = new(0, 0); 
var x = new Point(1, 2);
x = y; // 
      
      



Kotlin , . var, val . new.





val y: Point = Point(0, 0)
val x = Point(1, 2)
x = y //  !
      
      



C# ( ) ( ) . .





'==' , , . .





//  ,       
struct ValueType {}
//  ,   
class ReferenceType {}
      
      



Kotlin, . '==' , '==='. , , Int, Char, Double, jvm , . .NET , Kotlin , / .





Null safety

C# ( 8 ) null. !





var legalValue = maybeNull!;
//  legalValue  null, 
//    exception    
      
      



Kotlin null ,





val legalValue = maybeNull!! 
//  maybeNull == null, 
//    exception  
      
      



C# get/set, . .





class Example
{   
  //      backing field
  public string Name1 { get; set; } = "Pre-calculated expression";
  
  //    
  public string Name2 => "Calculated now";
  
  //  
  private const string Name3 = "Field"; 
}
      
      



Kotlin , , . , C#, public , . , set , var/val.





class Example {
  
  //      backing field
  val name1 = "Pre-calculated expression"
  
  //    
  val name2 get() = "Calculated now"
}
      
      



C# record , , ( ):





class JustClass
{
  public string FirstName { init; get; }
  public string LastName { init; get; }
}

record Person(string FirstName, string LastName);

... 
  
Person person1 = new("Nancy", "Davolio");
Person person2 = person1 with { FirstName = "John" };
      
      



Kotlin data class





class JustClass(val firstName: String, val lastName: String)

data class Person(val firstName: String, val lastName: String)

...

val person1 = Person("Nancy", "Davolio")
val person2 = person1.copy(firstName = "John")
      
      



C# , this





static class StringExt
{
  public static Println(this string s) => System.Console.WriteLine(s)
    
  public static Double(this string s) => s + s
}
      
      



Kotlin , . ,





fun String.println() = println(this)

fun String.double get() = this * 2
      
      



C# =>





numbers.Any(e => e % 2 == 0);
numbers.Any(e => 
  {
    //   ...
    return calculatedResult;
  })
      
      



Kotlin - , . DSL (Gradle + Kotlin ).





numbers.any { it % 2 == 0 }
numbers.any {
  //   ...
  calculatedResult
}
      
      



C# pattern matching c ( )





static Point Transform(Point point) => point switch
{
  { X: 0, Y: 0 }                    => new Point(0, 0),
  { X: var x, Y: var y } when x < y => new Point(x + y, y),
  { X: var x, Y: var y } when x > y => new Point(x - y, y),
  { X: var x, Y: var y }            => new Point(2 * x, 2 * y),
};

      
      



Kotlin switch when, , , , :





fun transform(p: Point) = when(p) {
  Point(0, 0)    -> Point(0, 0)
  else -> when {
    p.x > p.y    -> Point(...)
    p.x < p.y    -> Point(...)
    else         -> Point(...)
  }
}
      
      



. . Kotlin-way , , C# . Kotlin C# , C# Microsoft .








All Articles