
Anatoly
05.09.2017
12:28:33
хотя как-то костыльно, по моему скромному мнению

Andrey
05.09.2017
12:40:36
разве scope не переписывается в try finally?

Dmitry
05.09.2017
12:59:37
Кстати, один я заметил значительное изменение отношение людей к D? Что на Лоре что на OpenNet, что даже на Хабре?
https://habrahabr.ru/post/337098/#comment_10398996
Просто еще год назад все говном исходили, а пока только Гоферы везде где можно поливаются, а про Ди очень часто с большим уважением

Pavel
05.09.2017
13:04:44
Что то не уловил связи между твоим сообщением и ссылкой

Google

Pavel
05.09.2017
13:04:54
Там про Д вообще не упоминается

Andrey
05.09.2017
13:05:38
может там про Го?

Dmitry
05.09.2017
13:06:41
Там про Go

Pavel
05.09.2017
13:58:02
Отношение к go впринципе и не менялось, но все же при чем тут отношение к D непонятно :)

Dmitry
05.09.2017
13:59:32
Ну раньше о Ди куда хуже писали

Pavel
05.09.2017
14:01:34
Не, о нем пишут постоянно одно и то же - Д не нужен/мало инструментов. Сам язык никто еще не критиковал.
Хотя если копнуть в него глубже, там есть за что )

Dmitry
05.09.2017
14:23:53
что почитать про использование интерфейсов как типов?
Вообще в каких случаях имеет смысл создавать экземпляр с типом интерфейса, а не класа?
строка 11 http://paste.code123.org/27ccfbd5-2ff6

Oleg
05.09.2017
14:27:49

Pavel
05.09.2017
14:28:13
Везде где ты хочешь в коде абстрагироваться от того, в mysql у тебя лежат данные или в postgresql, надо завязываться только на интерфейс

Oleg
05.09.2017
14:28:15
либо банда 4х, либо head first

Google

Pavel
05.09.2017
14:28:19
То есть почти всегда :)
В своей программе тебе должно быть абсолютно наплевать, куда именно ходит объект dataBase

Oleg
05.09.2017
14:29:07
https://www.litres.ru/dzhon-vlissides/priemy-obektno-orientirovannogo-proektirovaniya-patterny-proektirovaniya-16419747/
https://www.ozon.ru/context/detail/id/20216992/
первую не читал, но о второй могу сказать, что оч доступным языком написана

Dmitry
05.09.2017
14:49:55
Вот у меня есть:
class Factory
{
IDatabase getDbType(string dbname)
{
if(dbname == "mysql")
return new PostgreSQL();
if(dbname == "pg")
return new MySQL();
else
return null;
}
}
и
Factory fc = new Factory();
IDatabase dataBase = fc.getDbType("pg");
Как мне узнать тип того что вернет getDbType?

Pavel
05.09.2017
14:56:54
Тебе не нужно это знать
Ты знаешь что то, что вернется, реализует интерфейс IDatabase. И дальше в программе ты дергаешь только те методы, которые нашел в IDatabase. Больше никаких.

Dmitry
05.09.2017
14:58:10
Тоесть уже совсем никак и это и не нужно. Верно?

Pavel
05.09.2017
14:59:18
Да.

Dmitry
05.09.2017
14:59:30
угу, понял, спасибо

Pavel
05.09.2017
14:59:33
Но как всегда, в реальности тебе все же может это быть нужно, иначе очень тяжко разрабатывать )

Dmitry
05.09.2017
14:59:46
и тогда как?

Pavel
05.09.2017
15:00:34
Например если ты тянешь из базы 1000000 записей, то в pg есть курсоры, которые могут эффектно наложиться на Ranges и оптимально использовать память, а в mysql нету.
Тогда начинают изобретать свистелки и перделки в интерфейсе, например какой-нибудь метод bool hasLazyQueries() А в коде ты дергаешь этот метод, но опять же об источнике ничего не знаешь.

Andrey
05.09.2017
15:17:16
тогда лучше что бы БД отдавали Range, и внутри юзали свои способы доступа

Ievgenii
05.09.2017
15:19:15
Юзай Монго))

Pavel
05.09.2017
15:20:29
Ну в случае mysql этот range будет бутафорией, которая просто выгружает все записи в память приложения а потом уже по ним бегает
Было бы прикольно сделать интерпретируемый язык с кириллическими лексемами ))

Andrey
05.09.2017
15:31:36
1С

Google

Pavel
05.09.2017
15:32:13
Ну это все же больше комбайн, который трудно ставить на линукс и поддерживать. И он проприетарный

Oleg
05.09.2017
15:42:28
Какой, хорошо говорящий по русски человек спокойно переносит неправильные склонения, падежи, числительные?

Pavel
05.09.2017
15:44:25
Добавить туда Ъ-нити

Oleg
05.09.2017
15:44:40
Будет что-то вроде 'покупай хороший кофта'
Английский для нас не родной, поэтому многие спокойно относиться к неправильному употреблению его в коде
И это идеально, иначе отвлекало бы

Pavel
05.09.2017
15:46:04
Да, склонения и падежи можно попробовать впилить в дизайн языка ?

Oleg
05.09.2017
15:46:28

Evil
05.09.2017
15:46:43
Ключевые матерные слова
Вместо for "нах"

Pavel
05.09.2017
15:47:48
Офигенная песочница получилась бы

Evil
05.09.2017
15:48:22
Вместо include/import "хуйнуть"
Эх ябпокодил

Dmitry
05.09.2017
16:00:56

Pavel
05.09.2017
16:03:24
Ну там просто транслятор в javascript, недостаточно фундаментально
Должен быть свой байткод, и какая то философия
Например "язык импортозамещения"

Ned Ogl
05.09.2017
18:26:38
Вместо for "нах"
По идее, раз dlang понимает юникод, он может в русскоязычные идентификаторы

Google

Ned Ogl
05.09.2017
18:27:30
Хотя не факт
Вот Nimrod точно может

Oleg
05.09.2017
18:39:30

Dmitry
06.09.2017
06:36:13

Maxim
06.09.2017
06:41:45
в идеале да, там, где ты будешь использовать интерфейс, тебе не надо знать о том, какую БД ты используешь, в этом вся магия — повышение уровня абстракции
А если в целом говорить про интерфейсы, то они были изобретены ради избавления от вакханалии множественного наследования, которая получилась в C++

Dmitry
06.09.2017
07:23:23

Maxim
06.09.2017
07:23:49
что добавлять?

Dmitry
06.09.2017
07:24:26
какой-нибудь метод bool hasLazyQueries()

Maxim
06.09.2017
07:24:48
все зависит от архитектуры

Admin
ERROR: S client not available

Maxim
06.09.2017
07:24:59
если в интерфейсе есть такой метод, то да)

Dmitry
06.09.2017
07:25:46
и дальше как его юзать. вот предположим я создал фабрику классов и фабрика возврщает мне используемую БД:
Factory fc = new Factory();
IDatabase dataBase = fc.getDbType("pg");
дальше типа:
if(database.hasLazyQuiries())
{
...
}

Maxim
06.09.2017
07:26:30
перед тобой вообще какая задача стоит?)

Dmitry
06.09.2017
07:26:40
пока есть время хочу разобраться

Maxim
06.09.2017
07:26:50
с чем?)

Dmitry
06.09.2017
07:27:04
с интерфейсами
ну и паттернами вообще

Maxim
06.09.2017
07:27:56
да с ними и разбираться не надо, интерфейсы решают задачу множественного наследования в языках, где множественного наследования нет

Google

Dmitry
06.09.2017
07:30:16
ну это понятно, мне реальный кейс нужен где они нужны. просто пока получается если я работаю с PG то проще вообще без интерфейсов все делать.
Получается только абстрактная ситуация вроде: "БД может меняться"

Maxim
06.09.2017
07:30:30
ну например, логирование
ты создаешь интерфейс Logger, где описаны, например, методы notice, warning, error, critical
и везде, где нужно логирование ты говоришь: «дайте мне объект, который реализует интерфейс Logger, я с его помощью буду лог вести»
и тебя не волнует, куда и как этот лог пишется, а также, что еще может делать переданный тебе класс и какие еще он реализует интерфейсы
ты, как бы, говоришь, если то, что вы мне передали, реализует интерфейс Logger, все отлично, я могу его использовать

Dmitry
06.09.2017
07:33:15
а перегрузку разве при при реализации интерфейса нужно делать? просто в примере на Java пишут так:
public class ClientLinuxImpl implements Client{
@Override
public String getTargetOS() {
return "Gentoo Linux";
}
}

Max
06.09.2017
07:33:26

Maxim
06.09.2017
07:33:47

Max
06.09.2017
07:34:15
кто были?
Интерфейсы. Не понимаю как они проблемы множественного наследования решают.

Maxim
06.09.2017
07:34:44
не было никогда в C++ интерфейсов, их роль там может выполнять абстрактный класс)
но наследоваться можно от любых классов, поэтому для C++ характерна проблема ромбовидного наследования
поэтому в большинстве улучшателей C++ не существует множественного наследования, но есть интерфейсы, которые ограниченно выполняют эту задачу

Dmitry
06.09.2017
08:33:15

qwerty
06.09.2017
08:35:52
Это переопределение, перегрузка - это overload

Dmitry
06.09.2017
08:36:33
а в ди это нужно то что выше?
Еще в книжке пишу:
Суть фабрики заключается в том, что специальный "фабричный" класс будет создавать и возвращать класс того или иного типа в зависимости от определенного условия. То есть если мы передадим туда, к примеру, "mysql", то он создаст и вернет нам экземпляр для работы с MySQL, если с PostgreSQL то экземпляр для работы с PostgreSQL
фраза корректна?
И корректна ли фраза:
IDatabase dataBase = fc.getDbType("pg"); // передаем в интерфейс тип БД с который мы работаем в данный момент

NullSanya
06.09.2017
08:48:44
Не, не очень

Dmitry
06.09.2017
08:49:29
а что не так?

NullSanya
06.09.2017
08:50:00
Скорее так: "создаем экземпляр класса, который реализует данный интерфейс"
Но лучше подожди, пока ответит кто поумней

Dmitry
06.09.2017
08:51:21