
u13147
31.05.2017
18:20:27

Dmitry
01.06.2017
07:39:28
Есть метод. с ветвлением if. В случае успеха он должен возвращать структуру. А что праивльнее возвращать в случае не успеха? null? пустую структуру?

Александр
01.06.2017
07:42:58
optional

Maxim
01.06.2017
07:47:37

Google

Dmitry
01.06.2017
07:47:56
Optional, T.init, throw exception
Вообще если метод что-то проверяет после чего делает Х и возвращается, есть смысл переписать как assert(condition); do X; а проверку вынести в вызывающий код

Dmitry
01.06.2017
07:54:19
Ну исключение наверно не лучший вариант т.к. если в одной из 100 таблиц нет данных то ее разумнее пропустить, чем исключение кидать...
хотя щас про optional почитаю..
@smertig а Optional это который в std.typecons ?

Александр
01.06.2017
07:57:59

Dmitry
01.06.2017
07:59:49
Dmitry assert(condition); do X;
в блоке успеха это сделать? Типа если успех, то делаем return с данными?

Denis
01.06.2017
08:18:00
Optional -> Nullable
но по смыслу Nullable это "неизвестное значение", как в SQL
Так что надо или флаг ставить или эксепшен кидать
Или возвращать структурку или тупл с флажком и результатом
Короче, зависит от смысла происходящего
так что покажи код)

Google

Dmitry
01.06.2017
08:19:23
Тупл с флажком и есть нуллабл

Dmitry
01.06.2017
08:21:31
да там смысл простой. Примерная суть:
myStruct [] foo()
{
sqlresult = ...
if(sqlresult.length >0) // запрос вернул данные
return mystructs;
else
// ?? return null или что ?
}

Dmitry
01.06.2017
08:22:56
Что тебе удобнее то и сделай, пустой массив кажется довольно простым решением

Dmitry
01.06.2017
08:23:11
а если null вернуть то норм будет?
просто минусы не пойму того и другого вариантов

Dmitry
01.06.2017
08:23:32
Нулл будет со всех сторон похож на пустой массив
Зависит от того чекаешь ты это или нет
Будут плюсы и минусы
Я вообще не вижу смысла в этом if если записей ноль очевидно и массив будет нулевой длинны

Dmitry
01.06.2017
08:26:32
м... логично...
и дальше тогда так:
void calc(carGPSPoint [] cargpspoints)
{
if(cargpspoints is null)
return;
foreach(car;cargpspoints)
{
//...
}
}
Dmitry наверно все же if нужен т.к. writeln(myPointsLonLat) показывает что myPointsLonLat которое из БД прилетает содержит [] т.е. не null ...

Dmitry
01.06.2017
08:38:18
А почему бы не чекать длину?
Вместо нулла

Denis
01.06.2017
08:45:22
(ок я кажется нить потерял)

Dmitry
01.06.2017
08:47:45
ну меня пока вроде устроил вариантс проверкой длинны притетающих данных

Denis
01.06.2017
08:57:11
Зависит от логики приложения. Иногда 0 строк это тоже верный ответ
например если делали поиск и ничего не нашли потому что в базе ничего нет об этом

Google

Maxim
01.06.2017
08:57:50
в идеале нужно некое «нулевое» значение, тот же пустой массив, тогда в основной логике даже проверок никаких не надо делать, алгоритм будет "что-то + ноль", код чище)
это, конечно, если в основной логике не нужно как-то по-особому обрабатывать ситуацию, когда ничего не найдено

Denis
01.06.2017
09:03:00
В данном случае пустой массив это корректный ответ может быть, в этом-то и всё дело

Dmitry
01.06.2017
09:03:44

Maxim
01.06.2017
09:04:45

Denis
01.06.2017
09:05:07
он структура, внутрь если заглянуть

Dmitry
01.06.2017
09:05:32
С чего бы? Нулл это 0-вой поинтер и нулевая длина

Denis
01.06.2017
09:05:43
Структура с флагом

Dmitry
01.06.2017
09:05:44
Такая вот конвенция в Ди

Denis
01.06.2017
09:05:52
struct Nullable(T);
https://dlang.org/phobos/std_typecons.html#.Nullable

Dmitry
01.06.2017
09:06:07
А при чем тут нуллабл?
Я про массив

Denis
01.06.2017
09:06:21
Дык я думал про Нуллабл речь, про нулл и говорить нечего
Nullable нужен
в зенки долблюс, простите
Видимо, Optional это Nullble в D?

Dmitry
01.06.2017
09:07:13
Тут все зависит от того что OP хочет с этими данными делать

Google

Dmitry
01.06.2017
09:08:30
Option был бы в струе с прочими фп языками, кажется

Denis
01.06.2017
09:30:24
Nulllable тоже в струе с каким-то
Сишарпом что ли

Dmitry
01.06.2017
09:31:03

Dmitry
01.06.2017
09:49:31
Такой вопрос. Инициализирую глобальный логгер:
static this()
{
fLogger = new FileLogger(logName);
}
но дальше в коде хочу лог удалить в одном из условий запуска, а он процессом этим уже заблокирован. Как лучше сделать?

Denis
01.06.2017
09:51:17
в одном из условий запуска чего?

Dmitry
01.06.2017
09:52:10
запуска. типа если запустили с определенными ключами, то старый лог удаляем

Denis
01.06.2017
09:53:06
это просто сахар
сделай логгер пустой и инить если опции нужные пришли
сахар это я про static this()

Admin
ERROR: S client not available

Dmitry
01.06.2017
09:54:24
т.е. создавать:
fLogger = new FileLogger(logName);
после того как я старый лог удалил и в других ветвях?

Denis
01.06.2017
13:04:03
например да
лучше не создавать то что не понадобится, так что стоит создавать когда он нужен

Денис
01.06.2017
13:30:18
Сейчас в го конфе нашёл ссылку
import core.thread, std.concurrency, std.datetime,
std.stdio, std.algorithm, std.conv;
void main(string[] args)
{
if (!args.length)
return;
foreach (number; args[1 .. $].map!(to!uint))
spawn((uint num) {
Thread.sleep(dur!"msecs"(10 * num));
writef("%d ", num);
}, number);
thread_joinAll();
}
SleepSort такая штука называется. Это законно?

Dmitry
01.06.2017
13:31:27
Это глупо)

u13147
01.06.2017
13:33:02
Я вчера тут спрашивал по поводу досовских прерываний. В общем, написал, но ничего оно не перехватывает. Запускал в Win XP под виртуалкой и в DosBox. Посмотрите, пожалуйста. https://pastebin.com/EMPcDZjD

Денис
01.06.2017
13:40:50
Это глупо)
Чому? Если придумать хорошую годную функцию для времени, то можно быстрее, чем NlgN обрабатывать.

Google

Александр
01.06.2017
13:54:11
если известно максимальное значение элементов, то проще другие сортировки поюзать

Dmitry
01.06.2017
14:07:15
Константа будет адовой
Спавн процесса это уже космос
Не считая рейсов конечно, что тем краше чем меньше время между процессами

u13147
01.06.2017
15:01:36
Может, здесь играет свою роль то, что запускается всё это чудо в виртуалке?

Dmitry
01.06.2017
15:02:03
Можно виртуалку чистого доса запустить
FreeDos должен сгодится

u13147
01.06.2017
15:04:39
И ещё такой момент.
У меня на ноуте клавиши Break нет, нажимаю с экранной клавиатуры. Ничего не происходит, но и приложение не закрывается. Ctrl + C срабатывает по дефолту.

Dmitry
01.06.2017
15:06:08

u13147
01.06.2017
15:06:35
Хм, флажок не меняется.
У меня нет сейчас компа с брэйком.

Dmitry
01.06.2017
15:07:24

u13147
01.06.2017
15:07:38
А можно программно подать этот же сигнал? К тому же, на Ctrl + C это же прерывание срабатывает, не так ли?

Denis
01.06.2017
15:07:59
в досе ctrl+c и break это разные кнопки
сканкоды разные будут с клавы

u13147
01.06.2017
15:08:41
Но в описании прерывания int 23h сказано, что оно ловит нажатия Ctrl + Break и Ctrl + C.
Да и вообще я системное программирование начал ещё до универа самостоятельно изучать на Linux.

Denis
01.06.2017
15:10:58
DOS это набор хаков
не ОС вовсе

u13147
01.06.2017
15:11:53
Да, я помню, это 16битная надстройка над 8битной осью, которая когда-то была 4битной. Вроде так.