Здравейте всички, добре дошли в друга статия от поредицата Kotlin Decoded. Това описва функцията main() в Kotlin, която е началната точка на програма, и ролята на точката и запетая в синтаксиса на Kotlin.

Kotlin Decoded е поредица от статии за Java разработчици, които искат да научат Kotlin. Той сравнява двата езика и дава полезни съвети от различни източници. Това не е пълен урок по Kotlin и предполага известен опит в програмирането. Прочетете въведението на серията за повече информация.

И още нещо, засега не обръщайте внимание на синтаксиса на функциите, променливите и други неща, които в момента не са важни. Ще научите повече за тях в следващите статии.

Съдържание

  1. Входна точка на програмата
    Защо имаме нужда от String[] аргументи?
    Защо Kotlin не изисква String[] аргументи?
    ∘ «Къде класът обгръща Главна функция?"
  2. точка и запетая
  3. Заключение

Входна точка на програмата

Това е методът, който трябва да стартирате, за да стартирате програмата.

Java:

public class Main {
    public static void main(String[] args) {
        
    }
}

Котлин:

Може да се напише по два начина:

  1. Без аргументи на низ:
fun main() {
    println("Hello world!")
}

2. С низови аргументи

fun main(args: Array<String>) {
    println(args.contentToString())
}

Тогава започнах да се чудя защо има два начина и защо имаме нужда от тези String аргументи. Честно казано, докато пиша на Java, никога не съм поставял под въпрос това. Просто го приех за даденост. Ако харесвате мен и се чудите защо, по дяволите, имаме нужда от тези аргументи, защо това е необходимо в Java, а не в Kotlin, прочетете следния пасаж, ако не — преминете към следващия раздел.

Защо имаме нужда от String[] аргументи?

Въпросът е, че можете да стартирате вашата Java програма от командния ред, като просто напишете:

java Main

Забележка: За да работи това, трябва преди това да промените директорията на директорията за изходи на вашия проект (папката, в която се генерират .class файлове, докато проектът се изгражда). Ако използвате IntelliJ, можете да прочетете повече за това тук.

Или можете да поставите някои аргументи след името на класа. Например, ако имате клас за обработка на файл, вие също ще посочите какъв файл трябва да бъде обработен, което ще бъде аргументът. Например:

java TxtProcessor my_file.txt

Приложението на Java може да приеме произволен брой аргументи от командния ред. Това позволява на потребителя да посочи конфигурационна информация, когато приложението се стартира. [източник]

Така че предишната команда съдържа само един аргумент, но можете да добавите още няколко от тях, разделени с интервали. Тези аргументи ще бъдат записани в масива String[] args.

Защо Kotlin не изисква String[] аргументи?

В Java е задължително да поставите това в параметъра на метода main. Но Kotlin ни позволява да го пропуснем. Kotlin се компилира до Java-съвместим байткод, когато е насочен към JVM. Така че той просто се компилира до метода Java main с String[] аргументи, за да може JVM да разбере.

Къде е класът, обвиващ функцията main?

Kotlin позволява функция да бъде извън обхвата на клас, както и множество класове, които не са вложени в един и същи файл:

class C1 {
    
}

class C2 {
    
}

Това може да бъде полезно, например, за създаване на функции за разширение, които ще бъдат разгледани по-късно в поредицата.

точка и запетая

Както може би сте забелязали, Kotlin цели да позволи на разработчиците да пишат по-малко код. Така че докато точка и запетая е задължителна в Java и някои други езици, тя не е задължителна в Kotlin. Компилаторът на Kotlin разбира края на израз чрез прекъсвания на редове (\n).

Въпреки че това опростява работата, има някои недостатъци:

Java:

int a = 2
+ 1;
System.out.println(a);
// Output: 3

Котлин:

var a = 2
+ 1
print(a)
// Output: 2

Това е така, защото редът + 1 в Kotlin се възприема като отделен израз. За да избегнете това, напишете „висящ оператор“ на първия ред:

var a = 2 +
1
print(a)
// Output: 3

Kotlin също разбира кога редовете не се анализират, освен ако не са съединени или когато сме в отворена скоба:

// open parenthesis
var array = arrayOf(1,2)
array[
        array.lastIndex
]

// the for-loop doesn't compile unless it's joined with the following line
for (i in 0..10)
    println()

// although the first line can be compiled on its own, 
// the following lines don't parse unless are joined with the previous one
if (time in 0..11) println("Good morning!")
else if (time == 12) println("Time for lunch")
else println("Good day!")

Така че избягвайте да разделяте редове, когато те са граматически валидни сами по себе си.

Въпреки това, IDE обикновено ще ви уведоми за това.

Освен това точката и запетая не се пренебрегват в определени случаи. Например, когато искате да напишете отделни изрази на един и същи ред:

var a = 2 + 1 ; print (a)

Също така имайте предвид, че точката и запетая са задължителни при деклариране на enum.

Заключение

Така че видяхме сравнения на Kotlin и Java за входната точка на програмата и точката и запетаята. Надявам се, че сте научили как да пишете функцията main() в Kotlin и сте разбрали кога точката и запетая не е задължителна или задължителна в синтаксиса на Kotlin. Ако ви е харесала тази статия, пляскайте 👏 и се абонирайте за още.

Други статии от тази серия