En ce qui concerne les fonctionnalités de sucre et de fantaisie dans les langages de programmation, C # et Kotlin sont parmi les premières options à l'esprit. Étant donné que ces deux langages occupent des niches similaires, c'est-à-dire qu'ils sont fortement typés, ramassés, multiplateformes, utilisés à la fois dans le backend et dans le développement mobile, nous allons aujourd'hui essayer de comparer leurs capacités syntaxiques et organiser un petit vote. Pour rendre la comparaison équitable, nous considérerons les dernières versions des deux langues. Je vais faire une réserve sur mon impartialité : j'aime également les deux langues, elles sont en développement continu et ne sont pas en retard l'une sur l'autre. Cet article est un article de comparaison, pas un tutoriel, donc certaines possibilités syntaxiques banales peuvent être omises.
Commençons par le point d'entrée
En C #, ce rôle est joué par la méthode statique du point d'entrée principal ou de niveau supérieur, par exemple
using static System.Console;
WriteLine("Ok");
Kotlin a besoin d'une fonction principale
fun main() = println("Ok")
A partir de ces deux petits exemples, tout d'abord, on remarque que dans Kotlin vous pouvez omettre le point-virgule. Avec une analyse plus approfondie, nous voyons qu'en C #, malgré la concision du point d'entrée indicatif, les méthodes statiques dans d'autres fichiers doivent toujours être encapsulées dans une classe et explicitement importées à partir de celle-ci (en utilisant static System.Console ), et Kotlin va plus loin et vous permet de créer des fonctions à part entière ...
Déclarer des variables
En C#, le type est écrit à gauche et le mot-clé new est utilisé pour créer une instance. Il existe un mot spécial var, qui peut remplacer le nom du type sur la gauche. Cependant, les variables au sein des méthodes en C # restent susceptibles d'être réaffectées.
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 .