
Anatoly
15.09.2016
09:44:40
а в учебном заведении что было?

Pavel
15.09.2016
09:44:52
Тебе надо очень много писать в ООП стиле чтобы начать чувствовать что к чему

Dmitry
15.09.2016
09:45:05
пф...)) я по образованию учитель географии и экологии)

Anatoly
15.09.2016
09:45:11
а потом переучиваться и писать в ФП стиле))))

Google

Grigirii
15.09.2016
09:45:40
Александреску хорош для опытных программистов, Ali Çehreli для новичков. так что очень рекомендую http://ddili.org/ders/d.en/

Dmitry
15.09.2016
09:46:20
Grigirii да он хорош) я у него даже в предисловии упомянут в бумажном издании)))

Anatoly
15.09.2016
09:49:51
хм, и правда)

Pavel
15.09.2016
09:50:32
А в каком контексте ты там упомянут?)

Dmitry
15.09.2016
09:50:53
Вопросы дурацкие задавал активно про файберы)))

Eto
15.09.2016
10:11:37
А тут кто-нибудь слышал про JAI?

Макс
15.09.2016
11:13:01
ну кстати да, скольк не читал пока не столкнулся и руками не попробовал сделать ничего толком не помогало
У меня вот есть потайное желание объяснять людям всякое, я однажды пытался двух полузнакомых личностей учить кодингу по скайпу, правда, задумка зафейлилась, так как они слишком уж непрограммисты оба были. Могу с тобой тоже попробовать, так как убеждён, что до определённого опыта в разы проще получать знания голосом, а уже только потом можно обходиться одними вопросами-ответами и всё понимать. Помогу бесплатно, за интерес, но и дисклеймер у меня соответствующий: я ни за что не отвечаю. :-D Я сам не дипломированный кодер и тем более не педагог, просто ООП вроде как-то понимаю. Ну и стабильный график созвонов не обещаю, просто в свободное время могу помогать. Нужно такое?


Dmitry
15.09.2016
11:14:17
Макс, спасибо за предложение. Пока у меня вопросы эпизодические возникают только. Я их тут задаю. Могу просто тебе писать наиболее ламерские, чтобы канал тут не захламлять
Просто мне нужно чтобы кто-то со стороны подтверждал ряд моментов которые я мог не правильно понять из тех же книг


Eto
15.09.2016
11:15:04
У меня вот есть потайное желание объяснять людям всякое, я однажды пытался двух полузнакомых личностей учить кодингу по скайпу, правда, задумка зафейлилась, так как они слишком уж непрограммисты оба были. Могу с тобой тоже попробовать, так как убеждён, что до определённого опыта в разы проще получать знания голосом, а уже только потом можно обходиться одними вопросами-ответами и всё понимать. Помогу бесплатно, за интерес, но и дисклеймер у меня соответствующий: я ни за что не отвечаю. :-D Я сам не дипломированный кодер и тем более не педагог, просто ООП вроде как-то понимаю. Ну и стабильный график созвонов не обещаю, просто в свободное время могу помогать. Нужно такое?
?

Pavel
15.09.2016
11:15:17
Я вообще не понимаю Дмитрия, вроде кодит какие-то нетривиальные вещи, картография и все такое, а потом задает самые примитивные вопросы :)

Eto
15.09.2016
11:15:35

Pavel
15.09.2016
11:16:49
@DmitryBubnenkov кстати начни на питоне форсировать ООП стиль, это очень сильно поможет в понимании. Так как в нем нету всяких заморочек по поводу выделения памяти, смещений и т.д.

Google

Pavel
15.09.2016
11:18:03
Я когда за С++ брался лет 8 назад, тоже мозг взрывался от тех стектрейсов, которые мне километрами падали в консоль при ошибках. А на интепретируемых языках научился хорошо понимать саму концепцию ооп без всяких деталей

Dmitry
15.09.2016
11:20:04
Кстати, почему я могу вызывать:
writeln(typeid(myclass));
но не могу:
writeln(myclass.typeid);
?

Макс
15.09.2016
11:21:53

Dmitry
15.09.2016
11:22:55
Э... ну просто в случае объяснения всего одним большим куском окажется, что 50% инфы я уже знаю, еще 50% пока не знаю где и как применять

Макс
15.09.2016
11:23:56
тоже верно. ну хз как лучше)

Dmitry
15.09.2016
11:24:35
лучше уж в процессе практики непонятные моменты прояснять ИМХО. Вот я щас сижу из книжки примеры делаю и что не понятно спрашиваю

Pavel
15.09.2016
11:25:24
Тоже норм вариант

Dmitry
15.09.2016
11:31:57
ну так как на счет вопроса про:
почему я могу вызывать:
writeln(typeid(myclass));
но не могу:
writeln(myclass.typeid);
?

Eto
15.09.2016
11:35:15
https://dlang.org/spec/expression.html#TypeidExpression

Grigirii
15.09.2016
11:35:23
потому что typeid это не функция, чтобы его так можно было вызывать. это ключевое слово языка и у него только один вариант использования

Dmitry
15.09.2016
11:35:39
а...
Кстати, а мне одному языr разметки dlangui верстку через flexbox на HTML напоминает?
Просто может может все же с Вадимом поговорить имеет смысл т.к. он вводит еще один язык который нужно учить и который только в его либе используется
void main()
{
@Encrypted string name;
}
Вот это же валидный код?
у меня он просто выпадает при компиляции с ошибкой:
Error: undefined identifier 'Encrypted'

Grigirii
15.09.2016
12:14:26
атрибуты должны быть объявлены. это может быть любое имя, например enum Encrypted;
объявляет их обычно тот, кто использует. Зачем нужен этот Encrypted? откуда взялся?

Dmitry
15.09.2016
12:16:22
да просто как пример его взял
ок понял
щас попробую

Google

Oleg
15.09.2016
12:46:32
Encrypted в этом случае это UDA и оно тебе может понадобиться, только когда ты понимаешь зачем и как использовать UDA https://dlang.org/spec/attribute.html#uda
небольшой пример использования https://habrahabr.ru/post/261641/
более серьёзный пример https://github.com/rcorre/jsonizer

Dmitry
15.09.2016
12:48:27
Угу, читаю

Oleg
15.09.2016
12:48:55
смысл в том, что во время компиляции ты что-то помечаешь (метод, поле и тд) и с помощью миксинов что-то строишь
но это мутненькая тема, на самом деле
кстати, кто в курсе что означает синтаксис
.close(iob._file);
?

Dmitry
15.09.2016
13:03:00
вызов глобального метода закрывающего файл?

Oleg
15.09.2016
13:03:48
в книге Александреску вроде нигде не было этого, хотя читал давно
да
.func обращается к одноимённой функции, объявленной на уровне модуля

Dmitry
15.09.2016
13:05:17
я оказался прав?

Dmitry
15.09.2016
13:05:22
а..)

Oleg
15.09.2016
13:05:22
как ни странно)

Dmitry
15.09.2016
13:05:27
хе)

Oleg
15.09.2016
13:05:54
просто без точки func вызывает метод структуры или класса

Dmitry
15.09.2016
13:05:59
а такая фишка только для отдельынх функций работает?

Oleg
15.09.2016
13:06:16
как-то раньше не запаривала эта тема, деталей не знаю)
но это всегда можно проверить)

Google

Dmitry
15.09.2016
13:07:02
ну тоесть как я понял есть функция foo онf объявлена где-то в самом верхнем скоупе. Есть класс. В нем может быть такая же функция с таким же именем
и если надо глобальную дернуть то вызываем ее через точку

Oleg
15.09.2016
13:07:19
да да да
import std.stdio;
void func()
{
writeln( "module func" );
}
struct A
{
void func()
{
writeln( "A func" );
}
void exec()
{
func();
.func();
}
}
void main()
{
A a;
a.exec();
}
выводит
A func
module func
кстати насчёт ООП
вот ты спросил мол зачем вызывать конструктор базового
ты сейчас понял?
это не относится к вызову методов через точку

Dmitry
15.09.2016
13:10:14
как я понимаю деструктор тоже объявлен как функция (или может делегат — я до сих пор тут плаваю) т.к. его можно вызывать через точку

Admin
ERROR: S client not available

Oleg
15.09.2016
13:10:37
деструктор просто так не вызывать

Dmitry
15.09.2016
13:10:42
ну вроде как понял — потому что нужно чтобы класс родитель тоже был создан при создании потомка — точнее его поля.

Oleg
15.09.2016
13:10:57
это один экземпляр
пример:
есть класс автомобиль, у него есть конструктор, которому нужны корпус, двигатель и тд
а ты хочешь, например, volvo
у него свой конструктор, который принимает кожанный салон

Dmitry
15.09.2016
13:12:13
в том плане что от потомка просто поля дописываются к базовому с пометкой кому они принаджелажат?

Oleg
15.09.2016
13:12:18
но при этом volvo не перестаёт быть машиной
тоже нужны корпус, двигатель
пометки по сути нет

Google

Oleg
15.09.2016
13:13:56
ООП это мыслительная абстракция, которая позволяет проектировать более простые системы
ООП не надо учить
надо учиться думать объектно-ориентированно
тогда многие моменты в программировании как-то сами собой поймутся
ну эт имхо, опять же)

Dmitry
15.09.2016
13:16:53
ну это да, но и опыт-опыт-опыт)
кстати, судя по количеству комментов тема про compile-time reflection не только мне показалась сложной)

Oleg
15.09.2016
13:18:33
?

Dmitry
15.09.2016
13:19:01
Я так и не могу понять простой случай когда те же UDA могут быть необходимы
Вот этот код должен работать?
string MyAtr;
void foo()
{
@MyAtr int name;
writeln(__traits(getAttributes(name)));
}

Anatoly
15.09.2016
13:20:07
ну просто ты не сталкивался с аннотациями в джаве, например или атрибутами в сишарпе
бывает очень полезно.... можно хранить всякую метаинфу
а вот, например, как в тестах используется
https://code.dlang.org/packages/unit-threaded

Dmitry
15.09.2016
13:21:32
как я понимаю есть вшитые аннотации типа:
@Deprecated
а есть те которые я могу сам реализовывать?

Oleg
15.09.2016
13:22:47
на то они и называются User Defined Attributes
UDA
__traits(getAttributes,name)
и так как ты написал как бы будет работать, но бесполезно
MyAttr не имеет никакого значения (пустая строка, null)
если ты просто ей присвоишь значение, то другое дело
хм...