Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
class RC
{
int rc, n;
public:
RC(int x, int n)
{
rc = x << n;
this.n = n;
}
void set(int x)
{
rc = x << n;
}
int asr1(int x, int n)
{
if (x > 0) x += (1 << (n - 1));
return asr(x, n);
}
int asr2(int x, int n)
{
if (x > 0) x += ((1 << n) - 1);
return asr(x, n);
}
int update(int x)
{
rc += asr2((x << n) - rc, n);
return asr1(rc, n);
}
int get()
{
return asr1(rc, n);
}
}
ваша бизнес-логика будет выражена на Обероне в виде, близком к общепринятому в ООП-подходе виду. Но на Обероне. Минимумом средств.
Профит в том, что мне не приходится «портировать» свои решения на Оберон, они на нем работают нативно. В других экосистемах это слегка не так.
Сейчас когда я пишу на джаве го дарте js и т.д. я вижу, как мои решения приходится модифицировать под те или иные особенности экосистемы. В обероне такого не было.
А пишу я так, как прочитал в книжках по программированию, там на самом деле учат писать так, как потом я писал на Обероне. Совпадение? Не думаю.
lands
|> filter (fun l -> l.Area > 500)
|> sendNotification
foreach land in lands.Where(l => l.Area > 500)
SendNotificationFor(land)
VAR res: SomeRange;
PROCEDURE Filter(i: Item) BOOLEAN;
BEGIN
RETURN i.area > 500
END Filter;
res := lands.Select(filter)
WHILE res.This() # NIL DO
res.This().SendNotification()
res.Next()
END;функциональщину подсовывать это слегка не комильфо
Однострочник заменен на то, чем он реально является — процедурой с одним аргументом, возвращающей результат.
Вы сами управляете циклом обхода результата, что позволяет контролировать процесс с вашей стороны.
Я поставлен вашей задачей в условия, удобные для С#, с его плюшками.
IEnumerator<Item> res;
Func<Item,bool> filter = delegate(i)
{
return i.area > 500;
}
res = lands.Select(filter)
while(res.MoveNext())
{
res.Current.SendNotification()
}
А что, однострочники не захватывают локальные переменные?
А вообще да, можно еще долго спорить о том, что алгоритмически правильнее, форыч или цикл с предусловием.
PROCEDURE SendNotification(i: Item) VOID;
BEGIN
i.SendNotification()
END SendNotification;
res := lands.Select(filter) //Почему с маленькой букву если процедура с большой?
res.ForEach(SendNotification)
ForEach(res, SendNotification)А в чем выигрыш для разработки от того, что используется минимум языковых средств
Профит в том, что мне не приходится «портировать» свои решения на Оберон, они на нем работают нативно.
Ещё я не люблю синтаксис языка C.
Оберон в программировании БПЛА