Участник:Alexsmail/Программирование 2020/новый черновик: различия между версиями

Содержимое удалено Содержимое добавлено
м →‎REPL: оформление
Строка 112:
</syntaxhighlight>
 
Если '''тело функции''' состоит из одной команды, мы пишем только одинодно ''утверждение'' (statement), например вызываем только одну функцию как в приведенном примере, мы можем вместо фигурных скобок написать знак равно и написать этот statement. Обратите внимание на отсутствие ''блока'' (открывающихся и закрывающих фигурных скобок). Недостатком такого синтаксиса является невозможность явно указать тип значения, которое мы возвращаем. Компилятор припишет нашей функции тоже значение, которое имеет statement, в нашем случае Unit. Если мы хотим указать другое значение, то мы не можем.
 
Заметим, что следующий код полностью эквивалентен предыдущему:
Строка 166:
'''Замечание * (Advanced)''': Для Kotlin существует и другие способы компиляции/исполнение, такие как компиляция в JS (JavaScript) или Kotlin Native - компиляцию минуя байткод. Всё это выходит далеко за рамки этой книги.
 
'''Замечание * (Advanced)''': Когда вы пишите программу на C\C++ вы её пишите под конкретную операционную систему и конкретное железо (hardware). Компилятор преобразует вашу программу в ''инструкции'' для конкретного процессора. Обычно, если вы хотите, чтобы ваша программа работала с другим железом, вам надо её перекомпилировать. Более того, если вы хотите, к примеру, работать с файловой системой, ваш код на C\C++ будет ''другой'' в зависимости от операционной системе. Java Virtual Machine позволяет ''абстрагироваться'' от этого. К примеру, если вам надо обратится к файловой системе, вы не обращаетесь к ней напрямую. Ваша программа бежит в виртуальной машине, она помещена некоторую виртуальную среду. Она вам представляется стандартный способ работать с файлами, т.е. не важно будет ли ваша программа бежать под Linix или Windows вы пишите один и тот же код, вызываете один и тот же API (Application Protocol Interface) у JVM. JVM умеет преобразовывать ваши вызовы для конкретной операционной системы и железа, на которой она стоит. Таким образом JVM является посредником. Вы пишите стандартный код, который не зависит от операционной системы и железа, а JVM преобразовывает его в подходящий для конкретного места, где ваша программа бежит, правильный код. Если код написан правильно, вам безразлично, к примеру, на каком процессоре вы бежите. Однако, при наличии ошибок, ''багов'', поведение системы может отличаться от конкретного процессора. Вы можете как получать разные неправильные результаты в зависимости от процессора, так и некоторые ошибки не будут проявляться на конкретном процессоре. Это также выходит за рамки данной книги.
 
Переходим в директорию с сохранённым файлом.
Строка 262 ⟶ 263 :
Main-Class: HelloWorldKt
</syntaxhighlight>
 
 
Первая строчка говорит о том, что формат манифест-файла 1.0. Т.е. формат, в котором дана информация в этом файле, версия этого формата является 1.0. Все виденные мной когда-либо манифест-файлы имеют эту версию, таким образов практической смысловой нагрузки тут нет. Следующая строчка говорит кем именно манифест-файл был сделан. Т.к. этот файл создала утилита kotlinc, которая была, в свою очередь сделана фирмой JetBrains, там и написано JetBrains Kotlin. Это поле просто для информации.
 
Последнее поле самое интересное. Там написано, что искать функцию main() нужно в HelloWorldKt.class. О чём я и говорил выше.
 
 
=== REPL ===
 
REPL является сокращением от read-eval-print loop — цикл "чтение — вычисление — вывод". REPL является форма организации простой интерактивной среды программирования в рамках средств интерфейса командной строки (CLI). В такой среде пользователь может вводить выражения, которые среда тут же будет вычислять, а результат вычисления отображать пользователю. Названия элементов ''цикла'' обозначают:
REPL является сокращением от read-eval-print loop — цикл "чтение — вычисление — вывод".
 
• функция read() читает одно выражение и преобразует его в соответствующую структуру данных в памяти;
• функция eval() принимает одну такую структуру данных и вычисляет соответствующее ей выражение;
• функция print() принимает результат вычисления выражения и печатает его пользователю.
 
И начинаем сначала (loop).
 
 
 
Running the REPL
Строка 273 ⟶ 287 :
 
Shell https://kotlinlang.org/assets/images/tutorials/command-line/kotlin_shell.png
 
https://ru.wikipedia.org/wiki/REPL