@dlangru

Страница 70 из 719
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
Макс, спасибо за предложение. Пока у меня вопросы эпизодические возникают только. Я их тут задаю. Могу просто тебе писать наиболее ламерские, чтобы канал тут не захламлять

Просто мне нужно чтобы кто-то со стороны подтверждал ряд моментов которые я мог не правильно понять из тех же книг

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

Eto
15.09.2016
11:15:35
А тут кто-нибудь слышал про JAI?
Рекомендую почитать: https://github.com/BSVino/JaiPrimer/blob/master/JaiPrimer.md

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

ООП это мыслительная абстракция, которая позволяет проектировать более простые системы

ООП не надо учить

надо учиться думать объектно-ориентированно

тогда многие моменты в программировании как-то сами собой поймутся

ну эт имхо, опять же)

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)

если ты просто ей присвоишь значение, то другое дело

хм...

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