JavaRush /وبلاگ جاوا /Random-FA /KotlinRush: آیا ادامه نوشتن در جاوا منطقی است؟
NikEy
مرحله
Новосибирск

KotlinRush: آیا ادامه نوشتن در جاوا منطقی است؟

در گروه منتشر شد
سلام، دانشجوی JavaRush، قبل از اینکه کاملاً جذب جاوا شوید، می‌خواهم افق دید شما را گسترش دهم و توجه را به زبان محبوب Kotlin جلب کنم !
KotlinRush: آیا ادامه نوشتن در جاوا منطقی است؟  - 1
Kotlin یک زبان نسبتا جوان است که توسط JetBrains توسعه یافته است . بله، بله، همان شرکتی که IDE مورد علاقه ما را توسعه داد: IntelliJ IDEA. Kotlin یک زبان JVM است و به طور کامل با جاوا سازگار است ، یعنی از کد Kotlin می توانید به راحتی به کتابخانه های آشنای جاوا دسترسی داشته باشید. Kotlin به قدری در بین جامعه برنامه نویسی محبوب بود که گوگل آن را به عنوان زبان رسمی توسعه اندروید به رسمیت شناخت و اخیراً Kotlin در پروژه های سازمانی محبوبیت پیدا کرده است. در این مقاله، من می خواهم چندین مثال مقایسه ای از کدهای نوشته شده در کاتلین و جاوا ارائه دهم و نتیجه گیری کنم. برو! بیایید طبق معمول با "سلام دنیا" شروع کنیم
// Java
public class Application {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}
// Kotlin
class Application
fun main(vararg args: String) {
    println("Hello World!")
}
با نگاهی به مثال کاتلین، بلافاصله می‌توانیم به موارد زیر توجه کنیم:
  • نیازی به نوشتن نقطه ویرگول در انتهای خط نیست.
  • همه روش ها با کلمه کلیدی سرگرم کننده توصیف می شوند .
  • برای چاپ یک خط، فقط یک کلمه کافی است - println() !
ایجاد یک نمونه
// Java (до 10)
final Application application = new Application();
// Kotlin
val application = Application()
تفاوت های کاتلین:
  • اگر از نمونه مشخص باشد، نیازی به اعلام نوع متغیر نیست.
  • به جای نوع متغیر - val (غیرقابل تغییر) یا var (قابل تغییر)؛
  • برای ایجاد یک نمونه نیازی به نوشتن کلمه کلیدی جدید ندارید !
شرح روش ها
// Java
public int sum(int a, int b) {
    return (a + b);
}
// Kotlin
fun sum(a: Int, b: Int): Int {
return (a + b)
}
تفاوت های کاتلین:
  • اگر چیزی باید از یک متد برگردانده شود، " : Int " به امضا اضافه می شود، جایی که Int نوع بازگشتی است.
  • شرح پارامترهای روش: ابتدا نام متغیر، سپس نوع.
  • از آنجایی که بدنه متد فقط از یک خط تشکیل شده است، می توانید بازگشت را حذف کنید :
    fun sum(a: Int, b: Int): Int = (a+b)
خروجی رشته فرمت شده
// Java
public int sum(int a, int b) {
    int result = (a + b);
    System.out.printf("Сумма %d и %d равна %d\n", a, b, result);
    return result;
}
// Kotlin
fun sum(a: Int, b: Int): Int {
    val result = (a + b)
    println("Сумма $a и $b равна $result")
    return result
}
کاتلین از درون یابی رشته ای پشتیبانی می کند، فقط از نماد "$" در ابتدای متغیر استفاده کنید. این نماد به طور قابل توجهی تمیزی و خوانایی کد را بهبود می بخشد. مقایسه مصادیق
// Java
object1.equals(object2)
// Kotlin
object1 == object2
در کاتلین، مقایسه " ==" برای انواع شی به equals! و برای مقایسه لینک ها از " ===" استفاده می شود. استثناها
// Java
public List<String> getFileContent(String file) throws IOException {
    Path path = Paths.get(file);
    return Files.readAllLines(path);
}
// Kotlin
fun getFileContent(file: String): List<String> {
    val path = Paths.get(file)
    return Files.readAllLines(path)
}
هیچ استثنای بررسی شده ای در Kotlin وجود ندارد؛ اکنون نیازی نیست که به طور بی پایان یک استثنا را در کل برنامه پرتاب کنید یا استثناهای چند سطحی ایجاد کنید try-catch. ایمنی پوچ
// Java
public class Data {
    String value;

    String render() {
        if (value == null) {
            return "Value: undefined";
        } else {
            return "Value:" + value.toUpperCase();
        }
    }
}
// Kotlin
class Data {
    var value: String? = null
    fun render(): String =
            "Value: ${value?.toUpperCase() ?: "undefined"}"
}
کاتلین از مشکل NPE مراقبت کرد و تعدادی از الزامات را معرفی کرد:
  • تمام فیلدها و متغیرهای کلاس باید مقداردهی اولیه شوند.
  • می توانید در یک فیلد یا متغیر "null" بنویسید، اما پس از آن باید به صراحت بگویید که متغیر شما Nullable است (علامت "؟" را بنویسید).
  • عملگر Elvis "?:" به این صورت عمل می کند: اگر Null در سمت چپ وجود دارد، آنچه در سمت راست است را بردارید. در مورد مثال ما، زمانی که متغیر مقدار مقدار دهی اولیه نشده باشد، مقدار “ undefined ” گرفته خواهد شد.
فیلدهای کلاس و دسترسی به آنها
// Java
public class Data {
    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}
class App {
    void execute() {
           Data data = new Data()
           data.setValue("Foo")
     }
}
// Kotlin
class Data {
    var value: String = ""
}
class App {
    fun execute() {
          val data = Data()
          data.value = "Foo" // Под капотом выполнится data.set("Foo")
     }
}
در کاتلین، کافی است که یک میدان را به سادگی توصیف کنیم و تمام: از قبل دارای گیرنده‌ها و تنظیم‌کننده‌های ضمنی است (hello lombok )، که در صورت تمایل می‌توان آن‌ها را در هر زمانی لغو کرد. در عین حال، مقدار فیلد را به سادگی با دسترسی مستقیم به آن می خوانیم و تغییر می دهیم و در زیر هود نامیده می شود get()|set(). چرخه ها
// Java
void example() {
    for(int i = 1; i <= 10; i++) {
        System.out.println(i);
    }

    for(String line : "a,b,c".split(",")) {
        System.out.println(line);
    }
}
// Kotlin
fun example() {
    for(i in 1..10) {
        println(i)
    }

    for(line in "a,b,c".split(",")) {
        println(line)
    }
}
Kotlin یک نحو راحت و یکنواخت برای پیمایش دنباله ها ارائه کرده است: شما به سادگی از یک متغیر در سمت چپ ، یک دنباله در سمت راست و کلمه کلیدی " in " در بین آن استفاده می کنید، نوع به طور خودکار توسط محتوا تعیین می شود. سینگلتون
// Java
public class Singleton {
    private static Singleton ourInstance = new Singleton();

    public static Singleton getInstance() {
        return ourInstance;
    }

    private Singleton() {
    }
}
class App {
    void execute() {
         Singleton singleton = Singleton.getInstance()
    }
}
// Kotlin
object Singleton {}

class App {
    fun execute() {
          val singleton = Singleton
    }
}
الگوی آشنای " singer " اغلب در عمل استفاده می شود، بنابراین کاتلین تصمیم گرفت یک کلمه کلیدی جداگانه " شی " ایجاد کند که به جای " کلاس " نوشته می شود و به این معنی است که کلاس یک تک تن است؛ در صورت استفاده، شما حتی نمی توانید نیاز به فراخوانی سازنده یا هر روش دیگری دارید! پارامترهای روش و مقادیر پیش فرض نامگذاری شده است
// Java
void setStatus(String code) {
    setStatus(code, "");
}

void setStatus(String code, String desc) {
    this.code = code;
    this.desc = desc;
}
// Kotlin
fun setStatus(code: String, desc: String = "") {
    this.code = code;
    this.desc = desc;
}

fun execute() {
    setStatus("200")
    setStatus(code = "200", desc = "Ok")
}
این اتفاق می افتد که همه پارامترهای یک متد یا سازنده نباید مورد نیاز باشند و در جاوا ما عادت داریم برای هر ترکیب ممکن از پارامترها مجموعه ای از متدها یا سازنده ها ایجاد کنیم. پارامترهای پیش فرض در Kotlin وارد شده است که به شما امکان می دهد 1 متد را اعلام کنید و بسته به شرایط مجموعه پارامترهای مورد نیاز را به آن منتقل کنید. جریان ها
// Java
String getFirst(List<String> strings, String alpha) {
    return strings.stream()
            .filter(x -> x.startsWith(alpha))
            .findFirst()
            .orElse("");
}
// Kotlin
fun getFirst(strings: List<String>, alpha: String): String {
    return strings.first { it.startsWith(alpha) }
}
معرفی استریم در جاوا 8 به یک قابلیت جدایی ناپذیر هنگام کار با مجموعه ها تبدیل شده است. در Kotlin، جریان‌ها حتی راحت‌تر و کاربردی‌تر شده‌اند: هر مجموعه قبلاً دارای مجموعه‌ای از روش‌های راحت و پرکاربرد برای کار با داده‌ها است. همچنین به عبارت لامبدا در روش اول توجه کنید: اگر تابع literal دقیقاً یک پارامتر داشته باشد، می‌توان اعلان آن را حذف کرد (به همراه ->) و به  آن اشاره کرد . وقت آن است که به پایان برسیم... من فقط یک بخش کوچک و اساسی از عملکرد را نشان دادم، اما مطمئن هستم که می خواهید Kotlin را امتحان کنید! با توجه به تجربه من می توانم نتایج زیر را بگیرم:
  • برای یک توسعه دهنده جاوا تسلط بر نحو Kotlin و شروع به نوشتن کد بسیار آسان است.
  • Kotlin کاملاً با جاوا سازگار است و می توانید آن را در پروژه های موجود خود امتحان کنید، به عنوان مثال، در آزمایشات.
  • کد کاتلین تمیزتر و خواناتر است، نیازی به نوشتن یک دسته دیگ بخار ندارید .
  • IDEA دارای یک تبدیل خودکار جاوا به کاتلین است، می توانید کدهای جاوای آماده را بگیرید و به طور خودکار آن را به کاتلین تبدیل کنید.
  • یک پروژه جدید باید در Kotlin نوشته شود، زیرا از نظر زیرساخت مانند جاوا است، اما از نظر استفاده بهتر و راحت تر است!
اگر مقاله را دوست داشتید و به طور کلی با منبعی در مورد جاوا مرتبط هستید، می توانم به نوشتن در مورد تجربه استفاده از Kotlin در یک پروژه سازمانی واقعی ادامه دهم. لینک های مفید:
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION