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

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

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

Ответить
xdsl
постоялец
Сообщения: 131
Зарегистрирован: 15.01.2009 12:49:03

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

Сообщение xdsl »

Разработал ООП-библиотеку на FreePascal для программирования контроллера Lego EV3, обозвал Rubirobot, разместил на http://rubirobot.ru/, лицензия LGPL. Сейчас активно отлаживаю, расширяю документацию и примеры. Получится что-то востребованное, размещу на гитхаб для совместной разработки. Буду рад любым замечаниям, предложениям, конструктивной критике.
Аватара пользователя
serbod
постоялец
Сообщения: 449
Зарегистрирован: 16.09.2016 10:03:02
Откуда: Минск
Контактная информация:

Сообщение serbod »

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

Базовый модуль 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 знака в каждой строке кода, но теряете десятки байтов на строку во время выполнения.
xdsl
постоялец
Сообщения: 131
Зарегистрирован: 15.01.2009 12:49:03

Сообщение xdsl »

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

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;
Ответить