Функция main()
Я предполагаю, что вы задавали себе вопрос о том, почему мы должны писать именно fun main() {}
в каждой программе. Теперь мы собираемся докопаться до сути этого!
Объявление функции main()
Итак, присмотритесь повнимательнее к функции main()
. На самом деле, это очень распространенная вещь: вы можете делать именно то, что делаете с любой другой функцией. Единственное отличие заключается в том, что это точка входа в программу. Это означает, что запуск программы начинается с вызова этой функции.
Давайте подробнее рассмотрим, из чего состоит main()
:
fun main() {}
fun
- это ключевое слово, которое показывает, чтоmain()
- это функция. Просто обычная функцияmain
- это имя функции. Важно знать, что мы не можем его изменить: если мы изменим его, например, наmain()
, программа будет компилироваться, но не запуститсяи, наконец, тело функции, как вы хорошо знаете, будет заключено в фигурные скобки.
На самом деле, в синтаксисе main()
все еще могут быть входные параметры — args
. Это необязательная часть объявления main()
, и мы поговорим об этом подробнее позже.
Итак, все, что вы можете сделать с помощью обычной функции, вместо переименования, можно сделать с помощью main()
.
Его главная особенность заключается в том, что его наличие обязательно: без него программа не запустится. Но main()
также может быть вызван специально. Например, он может быть вызван сам по себе:
var decrease = 3
fun main() {
if (decrease == 0)
return
decrease = decrease - 1
println(decrease)
main()
}
В этой программе каждый вызов main()
уменьшает значение глобальной переменной decrease
на 1 и выводит текущее значение, пока оно не станет равным 0. Слово "глобальный" означает, что эта переменная доступна из любого места в программе, в частности, в функции main()
.
Вывод этого кода выглядит следующим образом:
2
1
0
Аргументы функции main()
На самом деле функция main()
может иметь входные параметры. Они должны называться args
и храниться в массиве строк. В таком случае синтаксис main()
будет выглядеть следующим образом:
fun main(args: Array<String>) {}
Работа с args
осуществляется так же, как и с другими массивами: например, args.size
вернет количество аргументов, а args[1]
вернет программе второй аргумент.
Отлично, но для чего это нужно?
Простыми словами, аргументы функции main()
являются аргументами программы. Вы, вероятно, много раз в своей жизни использовали возможность его настройки, например, когда открывали файл с помощью "Открыть с помощью...": в этом случае местоположение файла передается в качестве аргументов программы.
Итак, используя аргументы main()
, мы передаем некоторые дополнительные внешние данные в саму программу.
Работа с командной строкой
Мы можем передавать аргументы программе с помощью инструментов IDE или командной строки. Вы уже знаете, как это можно сделать с помощью IDE. Другой способ немного сложнее.
Рассмотрим это более подробно: это универсальный подход, и навыки командной строки в любом случае понадобятся много раз на вашем пути программиста. Например, в простых случаях это может избавить от необходимости создавать графический интерфейс для взаимодействия с пользователем. Не бойтесь, если сейчас этот подход покажется вам слишком сложным: это всего лишь пример того, как точно задать аргументы программы с помощью командной строки.
?> Чтобы отправить аргументы командной строки в ваше приложение, вам нужна предварительно скомпилированная программа.
Итак, рассмотрим, как вы можете передавать аргументы через консоль: во-первых, вам нужна скомпилированная программа. Когда он у вас есть, вы вызываете командную строку. После этого вы запускаете приложение с помощью следующей команды:
java -jar имя_файла.jar args
После того как вы укажете имя файла
с расширением .jar, вы так же можете передать в аргументы программы на месте args
, разделенные пробелом. Теперь давайте посмотрим, как все это работает, на очень простом примере.
Практический пример
Давайте посмотрим на следующий код:
fun main(args: Array<String>) {
println(args[0])
println(args[1])
}
Эта программа выводит первые две строки, которые были указаны в качестве аргументов программы. Пусть эта программа находится в файле с именем print_args.kt
. И давайте передадим, например, следующие аргументы программы (или аргументы функции main()
): "Hello,", "Kotlin!". Сделайте это с помощью командной строки:
java -jar print_args.jar Hello, Kotlin!
Тогда результат будет следующим:
Hello,
Kotlin!
Итак, наш код был реализован следующим образом:
fun main(args: Array<String>) {
println(args[0]) // Hello,
println(args[1]) // Kotlin!
}
Если мы вместо этого передадим "Love", "Kotlin!", будет напечатано следующее:
Love
Kotlin!
Получается, что ничего не меняя в коде, мы влияем на результат программы, задавая аргументы main()
.
С аргументами или без них?
Как мы упоминали выше, функция main()
может существовать как с аргументами, так и без них. В качестве иллюстрации давайте запустим один и тот же код, который не использует аргументы программы двумя способами:
fun main(args: Array<String>) {
val firstName = "Luke"
val lastName = "Skywalker"
println(firstName + " " + lastName) // Luke Skywalker
}
fun main() {
val firstName = "Luke"
val lastName = "Skywalker"
println(firstName + " " + lastName) // Luke Skywalker
}
Так что все работает!
Более того, не будет ошибки, когда ваш файл будет содержать обе версии main()
– с аргументами и без них. Программа просто начнётся с выполнения main(args: Array <String>) {}
:
fun main(args: Array<String>) {
println(args[0]) // Love
println(args[1]) // Kotlin!
}
fun main() {
println("Hello, World!")
} // функция не будет запущена
Однако вы должны помнить, что в файле не может быть нескольких объявлений main()
с аргументами или нескольких main()
без них одновременно! Оба варианта объявления main()
могут быть представлены только в одном экземпляре, так как это правило подходит для любой другой функции.
Как насчёт другого типа, другого числа и другого имени аргументов? Конечно, у вас может быть функция main()
с совершенно разными входными параметрами в одном файле, например, это может быть main(arg: Int)
или main(a: Double, b: String)
, но тогда она больше не будет точкой входа. Это будет просто обычная функция. Для того, чтобы программа запустилась, программный файл должен содержать именно функцию с сигнатурой main()
или main(args: Array<String>)
.
Подводя итог, вы можете использовать args
, когда вам нужно работать с аргументами программы. Но если ваша программа не требует аргументов командной строки, аргументы командной строки могут быть опущены.
Заключение
Итак, программа начинается с main()
: теперь вы хорошо ее знаете, и вы знаете, как задавать аргументы этой функции и зачем она нужна. Теперь вы можете передавать данные в программу и изменять результат ее выполнения без изменения кода. И вы также узнали, как это сделать через командную строку. Это, безусловно, необходимый опыт для программиста.
Last updated