@dlangru

Страница 181 из 719
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
Есть метод. с ветвлением if. В случае успеха он должен возвращать структуру. А что праивльнее возвращать в случае не успеха? null? пустую структуру?
По-хорошему, либо «пустую» структуру, и программа должна ожидать такого поведения, либо бросать исключение «Шеф, все пропало! Гипс снимают, клиент уезжает!»

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
Нет - он будет грохаться с красивым эксепшеном при попытке его прочитать
Нулл прекрасно работает как массив 0-вой длины, ничего не грохается

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 хочет с этими данными делать

Видимо, Optional это Nullble в D?
Да, жаль название получилось длинное, а как я заметил чем длиннее название тем реже пользуются

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
Константа будет адовой

Спавн процесса это уже космос

Не считая рейсов конечно, что тем краше чем меньше время между процессами

Я вчера тут спрашивал по поводу досовских прерываний. В общем, написал, но ничего оно не перехватывает. Запускал в Win XP под виртуалкой и в DosBox. Посмотрите, пожалуйста. https://pastebin.com/EMPcDZjD
Выглядит здраво. Я бы правда не рассчитывал на вызов сложных функций из обработчика, для простоты поставь глобальный флажок в единицу и проверь на выходе из программы

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 срабатывает по дефолту.

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битной. Вроде так.

Страница 181 из 719