Rating@Mail.ru

Форум по операционной системе GNU/Linux и свободному программному обеспечению


Текущее время: 11 дек 2017, 03:33

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: код Kotlin & Java
Непрочитанное сообщениеДобавлено: 27 май 2017, 19:50 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10248
Откуда: Харьков
Про новый (2011г.) язык программирования Kotlin здесь уже говорилось в теме Kotlin.
Но там разговор об инструментарии Kotlin: где взять? как установить? проверить работоспособность? что там с версиями?

Но Kotlin во многом обсуждают как абсолютно прозрачную замену Java. Обсуждают даже такие варианты как: переписать код достаточно крупного Java-проекта, уже достаточно долго находящийся в развитии - переписать его на Kotlin.

Поэтому тема здесь будет о коде Kotlin.
И его соотношении и сосуществовании с библиотеками (.jar & .class) на традиционной Java.
Тут ещё хороший и нужный вопрос: почему, в каких областях, и из каких соображений Java, которая развивается с 1990г. и версия 1.0 начала 1996г. должна уступить место Kotlin?

P.S. Я не уверен, что смогу (буду иметь время и желание) писать сюда в тему примеры кода Kotlin в самые ближайшие дни, но а). тема такую следует застолбить + б). возможно кому-то захочется попробовать Kotlin раньше ... тем более, что по ссылке выше всё, что нужно для начала работы с Kotlin, уже описано.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: код Kotlin & Java
Непрочитанное сообщениеДобавлено: 27 май 2017, 23:19 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10248
Откуда: Харьков
Что такое Kotlin и с чем его едят: обучающее руководство и сравнение нового языка Android-разработки с Java
Цитата:
Изображение
Kotlin — это относительно молодой язык от российской компании JetBrains. Появился он в 2011 году. На конференции Google I/O 2017 команда разработчиков Android сообщила, что Kotlin стал официальным языком операционной системы.

Цитата:
в IntelliJ доступна автоматическая конвертация Java-кода в Kotlin и наоборот;

Заметим, что IntelliJ - это IDE именно от компании JetBrains, очень удачная, но единственная значимая разработка этой компании ...
Цитата:
Будущее Kotlin
Kotlin — это следующий этап развития Java, с которой он полностью совместим. Это делает его отличным инструментом для мобильных и энтерпрайз-приложений. А поскольку Kotlin теперь является официальным языком Android, можно не бояться, что, изучив его, вы останетесь без работы. Помочь в изучении этого языка вам сможет серия статей, описывающая процесс создания простого мобильного приложения

Цитата:
А вот список статей:
  1. Настройка Android Studio.
  2. MainActivity.kt: синтаксис, null-безопасность и другое.
  3. NewsFragment.kt: функции-расширения, Android-расширения и т.д.
  4. RecyclerView : классы данных и адаптеры делегатов.
  5. Kotlin, RxJava и RxAndroid.
  6. API :  Retrofit и Kotlin.
  7. Бесконечная прокрутка: функции высшего порядка и лямбды.
  8. Изменение ориентации экрана.
  9. Юнит-тестирование: Mockito, RxJava и Spek.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: код Kotlin & Java
Непрочитанное сообщениеДобавлено: 29 май 2017, 15:53 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10248
Откуда: Харьков
Olej писал(а):
Поэтому тема здесь будет о коде Kotlin.
И его соотношении и сосуществовании с библиотеками (.jar & .class) на традиционной Java.
Тут ещё хороший и нужный вопрос: почему, в каких областях, и из каких соображений Java, которая развивается с 1990г. и версия 1.0 начала 1996г. должна уступить место Kotlin?

Возьму готовое приложение на Java, которое я когда-то выписал на 15-ти разных языках программирования для сравнения, в том числе и Java.
Вот попытка его прописания на Kotlin и будет:
- попыткой прописать туже задачу на 16-м языке программирования ...
- сравнением кода Java с кодом Kotlin
- автоматически трансформировать Java-код в Kotlin-код средствами IntelIDEA, инструмента (IDE) от JetBrains
- сравнить как можно (можно ли?) использовать новые семантические конструкции Kotlin для "уплотнения" кода Java


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: код Kotlin & Java
Непрочитанное сообщениеДобавлено: 29 май 2017, 15:58 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10248
Откуда: Харьков
Olej писал(а):
Olej писал(а):
Возьму готовое приложение на Java, которое я когда-то выписал на 15-ти разных языках программирования для сравнения, в том числе и Java.

Код:
[olej@dell Kotlin]$ ls *.java
Complex.java  triangle.java

Это именно приложение подходящее для подобных сравнений, потому что оно, с одной стороны, не примитивно простое, типа Hello World, а с другой - не построенное на достаточно громоздкой задаче-проекте, на изучение одной постановки, формулировки которой (никому по существу не нужной) нужно часы времени убить...
Код:
[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 КБ]
Скачиваний: 17
triangle.java [2.63 КБ]
Скачиваний: 16
Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: код Kotlin & Java
Непрочитанное сообщениеДобавлено: 29 май 2017, 21:10 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10248
Откуда: Харьков
Olej писал(а):
Вот попытка его прописания на Kotlin и будет:
- попыткой прописать туже задачу на 16-м языке программирования ...
- сравнением кода Java с кодом Kotlin
- автоматически трансформировать Java-код в Kotlin-код средствами IntelIDEA, инструмента (IDE) от JetBrains
- сравнить как можно (можно ли?) использовать новые семантические конструкции Kotlin для "уплотнения" кода Java

Всё, что касается инструментов (IDE и др.) и технологии (использования инструментария) будет совсем в другой теме, вот здесь: Kotlin.
Начиная с установки IntelliJ IDEA:
Изображение
Потому что трансформацию кода Java -> Kotlin умеет только IntelliJ IDEA ... естественно его использовать.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: код Kotlin & Java
Непрочитанное сообщениеДобавлено: 31 май 2017, 19:41 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10248
Откуда: Харьков
Olej писал(а):
Возьму готовое приложение на Java, которое я когда-то выписал на 15-ти разных языках программирования для сравнения, в том числе и Java.
Вот попытка его прописания на Kotlin и будет:
- попыткой прописать туже задачу на 16-м языке программирования ...
- сравнением кода Java с кодом Kotlin
- автоматически трансформировать Java-код в Kotlin-код средствами IntelIDEA, инструмента (IDE) от JetBrains
- сравнить как можно (можно ли?) использовать новые семантические конструкции Kotlin для "уплотнения" кода Java

Выяснилась такая вот фича относительно приложения triangle.class:
- приложение, которое многократно собиралось и исполнялось в терминале, в 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 : завершение работы

Ошибка в среде IDEA происходит на операторе чтения консоли:
Код:
      Console cons = System.console();
      String szStr = "";
...
      szStr = cons.readLine( "%s%d%s", "вершина № ", i + 1, " : " );

Возникает ошибка, я в деталях не влезал, в различиях в терминальном вводе-выводе с GUI и CLI приложениях.


Вложения:
i01.png
i01.png [ 168.63 КБ | Просмотров: 577 ]
Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: код Kotlin & Java
Непрочитанное сообщениеДобавлено: 31 май 2017, 20:08 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10248
Откуда: Харьков
Olej писал(а):
Возникает ошибка, я в деталях не влезал, в различиях в терминальном вводе-выводе с GUI и CLI приложениях.

Не желая вникать в детали возникновения проблемы, приложение пришлось полностью переделать. А раз уж переделывать, то будут использованы абстрактные коллекции Java, и приложение переделано так, что оно обсчитывает теперь не только треугольники, но и произвольные выпуклые многоугольники (так же, как в старом наборе приложений-сравнений на Python и др. языках).
Теперь приложение (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( "---------------------------------" );
      }
   }
}   

Справка по нужным нам API здесь:
Class AbstractList<E>
Ввод данных с клавиатуры, Scanner


Вложения:
poly.java [3.28 КБ]
Скачиваний: 16
Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: код Kotlin & Java
Непрочитанное сообщениеДобавлено: 31 май 2017, 20:20 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10248
Откуда: Харьков
Olej писал(а):
Теперь приложение (poly.java) выглядит как-то так

Вот теперь приложение идентично выполняется что в CLI, что в IDEA!
Код:
[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 : завершение работы


Вложения:
i2.png
i2.png [ 160.58 КБ | Просмотров: 576 ]
Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: код Kotlin & Java
Непрочитанное сообщениеДобавлено: 31 май 2017, 21:00 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10248
Откуда: Харьков
Olej писал(а):
Вот теперь приложение идентично выполняется что в CLI, что в IDEA!

И теперь можно снова двигаться в направлении Kotlin.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: код Kotlin & Java
Непрочитанное сообщениеДобавлено: 02 июн 2017, 17:18 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10248
Откуда: Харьков
Olej писал(а):
И теперь можно снова двигаться в направлении Kotlin.

Скопировал работающий проект triangle.java в новый проект triangle. Проверил работоспособность (корректность) созданного проекта.
Делаем автоматическое преобразование файлов .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

После трансформации оба файла, и Complex.kt (который был мной взят где-то из публичной библиотеки в Интернет) и poly.kt (который написан под задачу) содержат синтаксические ошибки (с точки зрения семантики Kotlin).
Ошибки в poly.kt как-то связаны с конструктором Double, который "определён в kotlin.Double" и, нужно думать, отличается от определений в Java.


Вложения:
k1.png
k1.png [ 15.15 КБ | Просмотров: 563 ]
k2.png
k2.png [ 219.79 КБ | Просмотров: 563 ]
Вернуться к началу
 Профиль Отправить личное сообщение  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
[ Time : 0.450s | 19 Queries | GZIP : On ]