Программирование Lego EV3 на freepascal

Обсуждаются как существующие проекты (перевод документации, информационная система и т.п.), так и создание новых.

Модератор: Модераторы

Программирование Lego EV3 на freepascal

Сообщение xdsl » 02.02.2018 10:46:28

Разработал ООП-библиотеку на FreePascal для программирования контроллера Lego EV3, обозвал Rubirobot, разместил на http://rubirobot.ru/, лицензия LGPL. Сейчас активно отлаживаю, расширяю документацию и примеры. Получится что-то востребованное, размещу на гитхаб для совместной разработки. Буду рад любым замечаниям, предложениям, конструктивной критике.
xdsl
постоялец
 
Сообщения: 131
Зарегистрирован: 15.01.2009 13:49:03

Re: Программирование Lego EV3 на freepascal

Сообщение serbod » 02.02.2018 12:18:18

Судя по документации, работа проделана нешуточная, достойная уважения. Конструктора у меня нет, поэтому по поводу функционала ничего сказать не могу. А вот по поводу стиля кода есть замечания:

Базовый модуль uev3 содержит 286 переменных
типа Variant, с именами a, a0, a1..a9, b, b0, b1..b9, ... z, z0, z1..z9. Это позволяет быстро
создавать программы, не отвлекаясь на объявление переменных


Вредное решение, нарушающее принцип уменьшения числа связей и зависимостей через глобальные переменные. И еще нарушается принцип говорящих имен. Короткие имена из одной-двух знаков можно создавать внутри коротких блоков, где весь код на виду и "время жизни" переменной очень мало.

Код: Выделить всё
ev3screen
.print(10,20,'Привет!!!')
.fontBig()
.print(10,40,'Привет!!!')
.fontRotate(-30)
.fontStd
.print(10,60,'Поворот -30')
.show;


Такой стиль кода характерен для языков, где даже nil является объектом и где существует автоматическое удаление объектов. Для языка ObjectPascal это значительно усложняет отладку и удлиняет стек вызовов, то есть жрет больше памяти во время работы. Вы экономите 2-3 знака в каждой строке кода, но теряете десятки байтов на строку во время выполнения.
Аватара пользователя
serbod
постоялец
 
Сообщения: 449
Зарегистрирован: 16.09.2016 11:03:02
Откуда: Минск

Re: Программирование Lego EV3 на freepascal

Сообщение xdsl » 02.02.2018 17:06:49

Спасибо за конструктивные замечания.
Оба подхода предназначены для сокращения времени кодирования. Это важно во время робототехнических соревнований.

1. Про набор переменных в uev3. Фактически, это костыль, который позволяет не объявлять переменные, если очень торопишься. Если не торопишься - просто его не используешь. Все эти переменные в своем пространстве имен, библиотекой никак не используются, ни с чем не пересекаются и не конфликтуют. Можно их закомментировать, это никак не скажется на работе библиотеки.

2. Представленный механизм - не более чем удобство и при хорошо отлаженном коде библиотеки проблем не вызывает. В конце концов никто не мешает те-же самые действия проделать так:
Код: Выделить всё
ev3screen.print(10,20,'Привет!!!');
ev3screen.fontBig();
ev3screen.print(10,40,'Привет!!!');
ev3screen.fontRotate(-30);
ev3screen.fontStd;
ev3screen.print(10,60,'Поворот -30');
ev3screen.show;

или так:
Код: Выделить всё
with ev3screen do begin
print(10,20,'Привет!!!');
fontBig();
print(10,40,'Привет!!!');
fontRotate(-30);
fontStd;
print(10,60,'Поворот -30');
show;
end;
xdsl
постоялец
 
Сообщения: 131
Зарегистрирован: 15.01.2009 13:49:03


Вернуться в Разное

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

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

Рейтинг@Mail.ru