با طعم کد!

مهاجرت! این‌بار از جاوا به کاتلین

اگر ابتدای راه مهاجرت از جاوا به کاتلین هستید، شاید یک راهنمای اولیه نیاز داشته باشید!

اگر به تازگی قصد دارید کدهای خود را با زبان دوست داشتنی کاتلین بنویسید و تا به حال این کار را با زبان جاوا انجام می‌داده‌اید، شاید بد نباشد که برای ابتدای کار یک نقشه جامع برای تبدیل سینتکس و نجوه نوشتار کدهای اولیه و شاید حتی روزمره! داشته باشید. مفاهیمی مثلِ تعریف متغیر، مقدار دهی و بررسی null بودن (null check) و خیلی موارد دیگر…

تعریف متغیر‌ها

کاتلین

var w: Int
var z = 2
z = 3
w = 1

جاوا

int w;
int z = 2;
z = 3;
w = 1;

کاتلین

val x: Int
val y = 1

جاوا

final int x;
final int y = 1;

کار با null

کاتلین

val name: String? = null

var lastName: String?
lastName = null

var firstName: String
firstName = null // Compilation error!!

جاوا

final String name = null;

String lastName;
lastName = null

کاتلین

val length = text?.length

val length = text!!.length // NullPointerException if text == null

جاوا

if(text != null){
  int length = text.length();
}

رشته‌ها

کاتلین

val name = "Arvin"
val lastName = "Rokni"
val text = "My name is: $name $lastName"
val otherText = "My name is: ${name.substring(2)}"

جاوا

String name = "Arvin";
String lastName = "Rokni";
String text = "My name is: " + name + " " + lastName;
String otherText = "My name is: " + name.substring(2);

کاتلین

val text = """
        |First Line
        |Second Line
        |Third Line
""".trimMargin()

جاوا

String text = "First Line\n" +
              "Second Line\n" +
              "Third Line";

شرط کوتاه

کاتلین

val text = if (x > 5)
              "x > 5"
            else "x <= 5"

جاوا

String text = x > 5 ? "x > 5" : "x <= 5";

عملگرهای بیتی

کاتلین

val andResult  = a and b
val orResult   = a or b
val xorResult  = a xor b
val rightShift = a shr 2
val leftShift  = a shl 2

جاوا

final int andResult  = a & b;
final int orResult   = a | b;
final int xorResult  = a ^ b;
final int rightShift = a >> 2;
final int leftShift  = a << 2;

Is as In

کاتلین

if (x is Int) { }

val text = other as String

if (x in 0..10) { }

جاوا

if(x instanceof Integer){ }

final String text = (String) other;

if(x >= 0 && x <= 10 ){}

Smart Cast

کاتلین

if (a is String) {
  val result = a.substring(1)
}

جاوا

if(a instanceof String){
  final String result = ((String) a).substring(1);
}

When در برابر Switch

کاتلین

val x = // value
val xResult = when (x) {
  ۰, ۱۱ -> "0 or 11"
  in 1..10 -> "from 1 to 10"
  !in 12..14 -> "not from 12 to 14"
  else -> if (isOdd(x)) { "is odd" } else { "otherwise" }
}

val y = // value
val yResult = when {
  isNegative(y) -> "is Negative"
  isZero(y) -> "is Zero"
  isOdd(y) -> "is odd"
  else -> "otherwise"
}

جاوا

final int x = // value;
final String xResult;

switch (x){
  case 0:
  case 11:
    xResult = "0 or 11";
    break;
  case 1:
  case 2:
    //...
  case 10:
    xResult = "from 1 to 10";
    break;
  default:
    if(x < 12 && x > 14) {
      xResult = "not from 12 to 14";
      break;
    }

    if(isOdd(x)) {
      xResult = "is odd";
      break;
    }

    xResult = "otherwise";
}



final int y = // value;
final String yResult;

if(isNegative(y)){
  yResult = "is Negative";
} else if(isZero(y)){
  yResult = "is Zero";
}else if(isOdd(y)){
  yResult = "is Odd";
}else {
  yResult = "otherwise";
}

حلقه for

کاتلین

for (i in 1 until 11) { }

for (i in 1..10 step 2) {}

for (item in collection) {}
for ((index, item) in collection.withIndex()) {}

for ((key, value) in map) {}

جاوا

for (int i = 1; i < 11 ; i++) { }

for (int i = 1; i < 11 ; i+=2) { }

for (String item : collection) { }

for (Map.Entry<String, String> entry: map.entrySet()) { }

کالکشن‌ها

کاتلین

val numbers = listOf(1, 2, 3)

val map = mapOf(1 to "One", 2 to "Two", 3 to "Three")

جاوا

final List<Integer> numbers = Arrays.asList(1, 2, 3);

final Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "One");
map.put(2, "Two");
map.put(3, "Three");


// Java 9
final List<Integer> numbers = List.of(1, 2, 3);

final Map<Integer, String> map = Map.of(1, "One", 2, "Two", 3, "Three");

کاتلین

numbers.forEach {
    println(it)
}

numbers.filter  { it > 5 }
       .forEach { println(it) }

جاوا

for (int number : numbers) {
  System.out.println(number);
}

for (int number : numbers) {
  if(number > 5) {
    System.out.println(number);
  }
}

کاتلین

val groups = numbers.groupBy {
                if (it and 1 == 0) "even" else "odd"
             }

جاوا

final Map<String, List<Integer>> groups = new HashMap<>();
for (int number : numbers) {
  if((number & 1) == 0){
    if(!groups.containsKey("even")){
      groups.put("even", new ArrayList<>());
    }

    groups.get("even").add(number);
    continue;
  }

  if(!groups.containsKey("odd")){
    groups.put("odd", new ArrayList<>());
  }

  groups.get("odd").add(number);
}

// or

Map<String, List<Integer>> groups = items.stream().collect(
  Collectors.groupingBy(item -> (item & 1) == 0 ? "even" : "odd")
);

کاتلین

val (evens, odds) = numbers.partition { it and 1 == 0 }

جاوا

final List<Integer> evens = new ArrayList<>();
final List<Integer> odds = new ArrayList<>();
for (int number : numbers){
  if ((number & 1) == 0) {
    evens.add(number);
  }else {
    odds.add(number);
  }
}

کاتلین

val users = getUsers()
users.sortedBy { it.lastname }

جاوا

final List<User> users = getUsers();

Collections.sort(users, new Comparator<User>(){
  public int compare(User user, User otherUser){
    return user.lastname.compareTo(otherUser.lastname);
  }
});

// or

users.sort(Comparator.comparing(user -> user.lastname));
برچسب ها
نمایش بیشتر

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

بستن
بستن