код Kotlin & Java
Модератор: Olej
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
код Kotlin & Java
Про новый (2011г.) язык программирования Kotlin здесь уже говорилось в теме Kotlin.
Но там разговор об инструментарии Kotlin: где взять? как установить? проверить работоспособность? что там с версиями?
Но Kotlin во многом обсуждают как абсолютно прозрачную замену Java. Обсуждают даже такие варианты как: переписать код достаточно крупного Java-проекта, уже достаточно долго находящийся в развитии - переписать его на Kotlin.
Поэтому тема здесь будет о коде Kotlin.
И его соотношении и сосуществовании с библиотеками (.jar & .class) на традиционной Java.
Тут ещё хороший и нужный вопрос: почему, в каких областях, и из каких соображений Java, которая развивается с 1990г. и версия 1.0 начала 1996г. должна уступить место Kotlin?
P.S. Я не уверен, что смогу (буду иметь время и желание) писать сюда в тему примеры кода Kotlin в самые ближайшие дни, но а). тема такую следует застолбить + б). возможно кому-то захочется попробовать Kotlin раньше ... тем более, что по ссылке выше всё, что нужно для начала работы с Kotlin, уже описано.
Но там разговор об инструментарии Kotlin: где взять? как установить? проверить работоспособность? что там с версиями?
Но Kotlin во многом обсуждают как абсолютно прозрачную замену Java. Обсуждают даже такие варианты как: переписать код достаточно крупного Java-проекта, уже достаточно долго находящийся в развитии - переписать его на Kotlin.
Поэтому тема здесь будет о коде Kotlin.
И его соотношении и сосуществовании с библиотеками (.jar & .class) на традиционной Java.
Тут ещё хороший и нужный вопрос: почему, в каких областях, и из каких соображений Java, которая развивается с 1990г. и версия 1.0 начала 1996г. должна уступить место Kotlin?
P.S. Я не уверен, что смогу (буду иметь время и желание) писать сюда в тему примеры кода Kotlin в самые ближайшие дни, но а). тема такую следует застолбить + б). возможно кому-то захочется попробовать Kotlin раньше ... тем более, что по ссылке выше всё, что нужно для начала работы с Kotlin, уже описано.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: код Kotlin & Java
Что такое Kotlin и с чем его едят: обучающее руководство и сравнение нового языка Android-разработки с Java
Kotlin — это относительно молодой язык от российской компании JetBrains. Появился он в 2011 году. На конференции Google I/O 2017 команда разработчиков Android сообщила, что Kotlin стал официальным языком операционной системы.
Заметим, что IntelliJ - это IDE именно от компании JetBrains, очень удачная, но единственная значимая разработка этой компании ...в IntelliJ доступна автоматическая конвертация Java-кода в Kotlin и наоборот;
Будущее Kotlin
Kotlin — это следующий этап развития Java, с которой он полностью совместим. Это делает его отличным инструментом для мобильных и энтерпрайз-приложений. А поскольку Kotlin теперь является официальным языком Android, можно не бояться, что, изучив его, вы останетесь без работы. Помочь в изучении этого языка вам сможет серия статей, описывающая процесс создания простого мобильного приложения
А вот список статей:
- Настройка Android Studio.
- MainActivity.kt: синтаксис, null-безопасность и другое.
- NewsFragment.kt: функции-расширения, Android-расширения и т.д.
- RecyclerView : классы данных и адаптеры делегатов.
- Kotlin, RxJava и RxAndroid.
- API : Retrofit и Kotlin.
- Бесконечная прокрутка: функции высшего порядка и лямбды.
- Изменение ориентации экрана.
- Юнит-тестирование: Mockito, RxJava и Spek.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: код Kotlin & Java
Возьму готовое приложение на Java, которое я когда-то выписал на 15-ти разных языках программирования для сравнения, в том числе и Java.Olej писал(а): Поэтому тема здесь будет о коде Kotlin.
И его соотношении и сосуществовании с библиотеками (.jar & .class) на традиционной Java.
Тут ещё хороший и нужный вопрос: почему, в каких областях, и из каких соображений Java, которая развивается с 1990г. и версия 1.0 начала 1996г. должна уступить место Kotlin?
Вот попытка его прописания на Kotlin и будет:
- попыткой прописать туже задачу на 16-м языке программирования ...
- сравнением кода Java с кодом Kotlin
- автоматически трансформировать Java-код в Kotlin-код средствами IntelIDEA, инструмента (IDE) от JetBrains
- сравнить как можно (можно ли?) использовать новые семантические конструкции Kotlin для "уплотнения" кода Java
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: код Kotlin & Java
Olej писал(а):Olej писал(а): Возьму готовое приложение на Java, которое я когда-то выписал на 15-ти разных языках программирования для сравнения, в том числе и Java.
Код: Выделить всё
[olej@dell Kotlin]$ ls *.java
Complex.java triangle.java
Код: Выделить всё
[olej@dell Kotlin]$ cat Makefile
TASK = triangle.class
all: $(TASK)
triangle.class: Complex.java triangle.java
javac triangle.java
clean:
rm -f $(TASK)
Код: Выделить всё
[olej@dell Kotlin]$ make
javac triangle.java
Код: Выделить всё
[olej@dell Kotlin]$ ls *.class
Complex.class triangle.class Tric.class
Код: Выделить всё
[olej@dell Kotlin]$ java triangle
координаты вершин в формате: X Y
вершина № 1 : 0 0
вершина № 2 : 2 0
вершина № 3 : 0 2
вершин 3 : [0.0,0.0] [2.0,0.0] [0.0,2.0]
периметр = 6.82842712474619
площадь = 2.0
---------------------------------
координаты вершин в формате: X Y
вершина № 1 : завершение работы
- Вложения
-
- Complex.java
- (7.02 КБ) 105 скачиваний
-
- triangle.java
- (2.63 КБ) 112 скачиваний
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: код Kotlin & Java
Всё, что касается инструментов (IDE и др.) и технологии (использования инструментария) будет совсем в другой теме, вот здесь: Kotlin.Olej писал(а): Вот попытка его прописания на Kotlin и будет:
- попыткой прописать туже задачу на 16-м языке программирования ...
- сравнением кода Java с кодом Kotlin
- автоматически трансформировать Java-код в Kotlin-код средствами IntelIDEA, инструмента (IDE) от JetBrains
- сравнить как можно (можно ли?) использовать новые семантические конструкции Kotlin для "уплотнения" кода Java
Начиная с установки IntelliJ IDEA:
Потому что трансформацию кода Java -> Kotlin умеет только IntelliJ IDEA ... естественно его использовать.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: код Kotlin & Java
Выяснилась такая вот фича относительно приложения triangle.class:Olej писал(а): Возьму готовое приложение на Java, которое я когда-то выписал на 15-ти разных языках программирования для сравнения, в том числе и Java.
Вот попытка его прописания на Kotlin и будет:
- попыткой прописать туже задачу на 16-м языке программирования ...
- сравнением кода Java с кодом Kotlin
- автоматически трансформировать Java-код в Kotlin-код средствами IntelIDEA, инструмента (IDE) от JetBrains
- сравнить как можно (можно ли?) использовать новые семантические конструкции Kotlin для "уплотнения" кода Java
- приложение, которое многократно собиралось и исполнялось в терминале, в CLI варианте... на протяжении нескольких лет...
- оно же, перенесенное в проект IDEA, замечательно компилируется...
- но при попытке выполнения (Run) из среды IDEA, слетает по исключению (см. картинку)
- но это же приложение (triangle.class), собранное в IDEA, замечательно запускается с CLI варианте (в терминале):
Код: Выделить всё
[olej@dell triangle.old]$ pwd
/home/olej/IdeaProjects/triangle.old/out/production/triangle.old
[olej@dell triangle.old]$ java triangle
координаты вершин в формате: X Y
вершина № 1 : 0 0
вершина № 2 : 1 0
вершина № 3 : 0 1
вершин 3 : [0.0,0.0] [1.0,0.0] [0.0,1.0]
периметр = 3.414213562373095
площадь = 0.5
---------------------------------
координаты вершин в формате: X Y
вершина № 1 :
ошибка ввода!: java.util.NoSuchElementException
вершина № 1 : завершение работы
Код: Выделить всё
Console cons = System.console();
String szStr = "";
...
szStr = cons.readLine( "%s%d%s", "вершина № ", i + 1, " : " );
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: код Kotlin & Java
Не желая вникать в детали возникновения проблемы, приложение пришлось полностью переделать. А раз уж переделывать, то будут использованы абстрактные коллекции Java, и приложение переделано так, что оно обсчитывает теперь не только треугольники, но и произвольные выпуклые многоугольники (так же, как в старом наборе приложений-сравнений на Python и др. языках).Olej писал(а):Возникает ошибка, я в деталях не влезал, в различиях в терминальном вводе-выводе с GUI и CLI приложениях.
Теперь приложение (poly.java) выглядит как-то так (название пришлось поменять, чтобы иметь возможность сравнивать выполнение со старым вариантом):
Код: Выделить всё
import java.io.*;
import java.util.*;
import java.lang.Double.*;
class Polygon extends ArrayList<Complex> { // class Complex заимствуется из отдельного файла
public String toString() {
String ret = "";
for( int i = 0; i < size(); i++ )
ret += "[" + ( new Double( get( i ).re ) ).toString() + "," +
( new Double( get( i ).im ) ).toString() + "] ";
return ret;
}
public double perimeter() {
double summa = 0.0;
for( int i = 0; i < size(); i++ )
summa += get( i ).minus( i != size() - 1 ? get( i + 1 ) : get( 0 ) ).r();
return summa;
}
public double square() {
double summa = 0.0;
for( int i = 1; i < size() - 1; i++ ) {
Complex side1 = get( i ).minus( get( 0 ) ),
side2 = get( i + 1 ).minus( get( 0 ) );
summa += side1.r() * side2.r() *
Math.abs( Math.sin( side1.theta() - side2.theta() ) ) / 2.;
}
return summa;
}
}
public class poly {
public static void main( String[] args ) {
Scanner in = new Scanner( System.in ); // создание объекта чтения из стандартного потока ввода
while( true ) {
System.out.println( "координаты вершин в формате: X Y" );
Polygon polygon = new Polygon();
String coord = "";
while( true ) {
System.out.printf( "%s%d%s", "вершина № ", polygon.size() + 1, " : " );
try { coord = in.nextLine(); } // чтение строки из консоли
catch( java.util.NoSuchElementException ex ) {
System.out.println( "завершение работы" );
System.exit( 0 ); // EOF: ^D
}
if( 0 == coord.length() )
if( polygon.size() != 0 ) break; // завершение многоугольника
else {
System.out.println( "завершение работы" );
System.exit( 0 );
}
try { // выделение координат
StringTokenizer st = new StringTokenizer( coord, " \t\n" );
double x = ( new Double( (String)st.nextElement() ) ).doubleValue(),
y = ( new Double( (String)st.nextElement() ) ).doubleValue();
polygon.add( new Complex( x, y ) );
}
catch( java.util.NoSuchElementException ex ) {
System.out.println( "ошибка ввода!: " + ex.toString() );
continue;
}
catch( java.lang.NumberFormatException ex ) {
System.out.println( "ошибка формата!: " + ex.toString() );
continue;
}
}
System.out.println( "вершин " + polygon.size() + " : " + polygon );
System.out.println( "периметр = " + polygon.perimeter() );
System.out.println( "площадь = " + polygon.square() );
System.out.println( "---------------------------------" );
}
}
}
Class AbstractList<E>
Ввод данных с клавиатуры, Scanner
- Вложения
-
- poly.java
- (3.28 КБ) 115 скачиваний
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: код Kotlin & Java
Вот теперь приложение идентично выполняется что в CLI, что в IDEA!Olej писал(а): Теперь приложение (poly.java) выглядит как-то так
Код: Выделить всё
[olej@dell Kotlin]$ java poly
координаты вершин в формате: X Y
вершина № 1 : 1 1
вершина № 2 : -1 1
вершина № 3 : -1 -1
вершина № 4 : 1 -1
вершина № 5 :
вершин 4 : [1.0,1.0] [-1.0,1.0] [-1.0,-1.0] [1.0,-1.0]
периметр = 8.0
площадь = 4.0
---------------------------------
координаты вершин в формате: X Y
вершина № 1 : завершение работы
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: код Kotlin & Java
И теперь можно снова двигаться в направлении Kotlin.Olej писал(а): Вот теперь приложение идентично выполняется что в CLI, что в IDEA!
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: код Kotlin & Java
Скопировал работающий проект triangle.java в новый проект triangle. Проверил работоспособность (корректность) созданного проекта.Olej писал(а):И теперь можно снова двигаться в направлении Kotlin.
Делаем автоматическое преобразование файлов .java в файлы .kt - меню: Code -> Convert Java File to Kotlin File.
Код: Выделить всё
[olej@dell src]$ pwd
/home/olej/IdeaProjects/triangle/src
[olej@dell src]$ ls
Complex.kt poly.kt
Ошибки в poly.kt как-то связаны с конструктором Double, который "определён в kotlin.Double" и, нужно думать, отличается от определений в Java.
- Вложения
-
- k1.png
- (15.15 КБ) 2574 скачивания
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 7 гостей