@dlangru

Страница 257 из 719
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


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
Да, склонения и падежи можно попробовать впилить в дизайн языка ?

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
Эх ябпокодил
https://yopta.space/ навалом такого

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 точно может

Dmitry
06.09.2017
06:36:13
Тогда начинают изобретать свистелки и перделки в интерфейсе, например какой-нибудь метод bool hasLazyQueries() А в коде ты дергаешь этот метод, но опять же об источнике ничего не знаешь.
Так, погоди, ну а как мне узнать с какой БД я работаю в данный момент? Это можно как-то сделать? или все. появился интерфейс и тип БД превратился в черный ящик

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

А если в целом говорить про интерфейсы, то они были изобретены ради избавления от вакханалии множественного наследования, которая получилась в C++

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:34:15
кто были?
Интерфейсы. Не понимаю как они проблемы множественного наследования решают.

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

но наследоваться можно от любых классов, поэтому для C++ характерна проблема ромбовидного наследования

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

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
Скорее так: "создаем экземпляр класса, который реализует данный интерфейс"

Но лучше подожди, пока ответит кто поумней

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