Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод типов 
:(
    Опции темы
 
Как вы относитесь к выводу типов?
Вывод типов - добро [ 20 ]  [74.07%]
Вывод типов - зло [ 2 ]  [7.41%]
Не знаю, что это такое [ 5 ]  [18.52%]
Всего проголосовавших: 27
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
djamshud
Дата 15.5.2010, 14:07 (ссылка)   | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



GoldFinch, я, как и все остальные наверно, в этой теме провожу время. И выражаю свою гражданскую позицию, которая заключается в том, что в изначально мощные изящные языки (я говорю все же скорее о с++, ибо он мне ближе) тянут бяки, которые безусловно хороши там, где им место, там, где они заложены в архитектуру языка. В с++ же это "костыли, палки и веревки", которые нарушают его изящную концепцию и приводят к тому, что программисты начинают думать не в терминах языка, а в терминах "костылей, палок и веревок" в то время, как задача изумительно (ИЧСХ, чаще проще) решается без них.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
GoldFinch
Дата 15.5.2010, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



djamshud, по тому что ты говоришь - получается что ты не знаешь языка, 
не знаешь настолько чтобы вообще говорить о "терминах языка"

STL - это часть языка.
алгоритмы - это часть языка.
функторы которые нужны алгоритмам - тоже часть языка.
адапторы в <functional> - часть STL но, она устарела, по этому сделали boost.bind, сейчас std::tr1::bind
tr1 - это во всех смыслах часть языка

термины языка это например Callable. В С++98 это как правило подразумевает собой функтор, как правило результат bind

djamshud, знаешь ли ты такой термин языка, как адаптер?

Это сообщение отредактировал(а) GoldFinch - 15.5.2010, 14:21
PM MAIL ICQ   Вверх
djamshud
Дата 15.5.2010, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



>STL - это часть языка.
>алгоритмы - это часть языка.
>функторы которые нужны алгоритмам - тоже часть языка.

Да

><functional> - часть STL но, она устарела, по этому сделали boost.bind, сейчас std::tr1::bind
>tr1 - это во всех смыслах часть языка

Костыли. Которые к сожалению наверное скоро попадут в язык, но в данный момент это еще не стандарт.

>djamshud, по тому что ты говоришь - получается что ты не знаешь языка, 
>не знаешь настолько чтобы вообще говорить о "терминах языка"

smile

Добавлено через 6 минут и 56 секунд
>djamshud, знаешь ли ты такой термин языка, как адаптер?

Я знаю такой паттерн проектирования, который никаким боком не относится к языку. Мы же говорим о языковых конструкциях.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
GoldFinch
Дата 15.5.2010, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



djamshud, а про bind1st, mem_fn и еще кучу других биндеров и адаптеров ты слышал? 
это знаешь ли стандарт С++98

Добавлено @ 14:40
Цитата(djamshud @  15.5.2010,  15:21 Найти цитируемый пост)
Я знаю такой паттерн проектирования, который никаким боком не относится к языку. Мы же говорим о языковых конструкциях. 

Цитата("ISO\IEC 14882 20.3")

Код

/ / 20.3.6, binders:
template < class Operation > class binder1st ;
template < class Operation , class T>
binder1st < Operation > bind1st ( const Operation &, const T&);
template < class Operation > class binder2nd ;
template < class Operation , class T>
binder2nd < Operation > bind2nd ( const Operation &, const T&);
/ / 20.3.7, adaptors:
template < class Arg , class Result > class pointer_to_unary_function ;
template < class Arg , class Result >
pointer_to_unary_function <Arg ,Result > ptr_fun ( Result (*)( Arg ));
template < class Arg1 , class Arg2 , class Result >
class pointer_to_binary_function ;
template < class Arg1 , class Arg2 , class Result >
pointer_to_binary_function <Arg1 ,Arg2 ,Result >
ptr_fun ( Result (*)( Arg1 , Arg2 ));
/ / 20.3.8, adaptors:
template < class S , class T > class mem_fun_t ;
template < class S , class T , class A > class mem_fun1_t ;
template < class S , class T>
mem_fun_t <S,T > mem_fun (S (T::*f )());
.................................................................


binders and adaptors

Это сообщение отредактировал(а) GoldFinch - 15.5.2010, 14:41
PM MAIL ICQ   Вверх
djamshud
Дата 15.5.2010, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



GoldFinch, я понимаю, к чему ты клонишь. Но само по себе наличие этого в стандарте с++ не делает их "правильными" в моих глазах. К сожалению библиотеки (в т.ч. стандартные) изобилуют идеями, доведенными до идиотизма. Что влечет за собой необходимость введения все новых и новых идей, которые бы обслуживали старые.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
JackYF
Дата 15.5.2010, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 2
Всего: 162



Вывод типов - добро. На подсказки IDE мне плевать - мне важно, чтобы код был читаемым, а читать его могут в любом редакторе. Новое auto в С++ - отличное улучшение, уже пользуюсь. Помимо краткости, оно ещё даёт возможности переписывать меньшее количество кода при изменении возвращаемых значений фунцкий.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Любитель
Дата 15.5.2010, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(JackYF @  15.5.2010,  14:54 Найти цитируемый пост)
оно ещё даёт возможности переписывать меньшее количество кода при изменении возвращаемых значений фунцкий. 

Во!

Я вначале хотел сказать, что вывод типов позволяет минимизировать количество изменений при рефакторинге, но что-т подумал, что все скажут, что "фигня, моя ИДЕ итак это делает в один клик". Но, учитывая, что про С++ столько говорим - я думаю, что можно акцентировать и на этом плюсе. smile 


--------------------
PM MAIL ICQ Skype   Вверх
Vasay
Дата 15.5.2010, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 2
Всего: 73



Любитель, 



В целом, я с вами согласен.

Понятно, что местами применение вывода типов будет весьма уместно. А там где неуместно - можно его и не применять.

Но, как показывает практика - чем больше свободы, тем ближе анархия. Люди начнут писать auto (var, ....)  везде, где только можно, и мы будем иметь код, типа:

Код


auto myVar = someObj.someMethod();




И человек, который будет в дальнейшем читать этот код, будет вынужден лезть в доки класса, к которому принадлежит someObj, что бы посмотреть, что же там возвращает someMethod.  И дай бог, чтоб IDE нормально все это разбирали.


Это сообщение отредактировал(а) Vasay - 15.5.2010, 23:07


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
GoldFinch
Дата 15.5.2010, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



Vasay, в моей ИДЕ достаточно навести мышку на "someMethod" чтобы получить ее прототип и коммент с доками к ней (если есть)
PM MAIL ICQ   Вверх
Любитель
Дата 16.5.2010, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(Vasay @  15.5.2010,  23:06 Найти цитируемый пост)
И человек, который будет в дальнейшем читать этот код, будет вынужден лезть в доки класса, к которому принадлежит someObj, что бы посмотреть, что же там возвращает someMethod.  И дай бог, чтоб IDE нормально все это разбирали.

Ещё раз. А почему этой проблемы нет, если мы не присваиваем переменной (ну мало ли) а сразу вызываем парочку методов?
Код

someObj.someMethod().someAnotherMethod();


Понятно, что длинная цепочка обычно просто плохочитабельная, хотя тоже зависит от подхода - есть и вполненормальные цепочечноориентированные методы, тот же LINQ на самом деле. Но сам факт - что возвращает someMethod строго говоря мы не знаем, тем не менее мы вполне можем так написать - я не вижу в этом ничего плохого.

Да, поддержка со стороны IDE нужна, опять-таки, я не говорю про С++ - там вообще всё иначе (по крайней было в моё время). Но для ИДЕ ни с цепочками, ни с "варами" проблем нет.

Было время, когда я одобрял var только тогда, когда в присваиваемом экспрешене явно было видно тип (либо вызов конструктора, либо вызов какого-нибудь статик-проперти Instance или Current). Однако на текущем проекте и я, и не только я активно используем var - ни разу проблем не было. Даже, на мой взгляд код чище и читабельней smile


--------------------
PM MAIL ICQ Skype   Вверх
Joil
Дата 16.5.2010, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 24.1.2008

Репутация: нет
Всего: 8



Я не в теме пока что... А к методам это применительно? т е можно написать что то типа:
Код

auto getVar() {
    //bla bla bla
}

По сабжу, поставил Зло, т. к. мне показалось это не совсем удобным с т. з. читабельности и не очень красивым кодом. Хотя может я изменю свое мнение, нужна практика (но так как в Java этого нет, пока ее не будет).

Это сообщение отредактировал(а) Joil - 16.5.2010, 11:14
--------------------
Who had deceived thee so often as thyself? © Benjamin Franklin--------------------Always bear in mind that your own resolution to succeed is more important than any other. © Abraham Lincoln--------------------If you need it - do it, if you want it - take it! © ...
PM MAIL ICQ   Вверх
Любитель
Дата 16.5.2010, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(Joil @  16.5.2010,  11:09 Найти цитируемый пост)
Я не в теме пока что... А к методам это применительно? т е можно написать что то типа:

К доступным извне - нет. К "локальным", если такое понятие есть в языке - да. В случае шарпа - это лямбды. НУ скаем, типичный пример:
Код

var orderedProducts = productsList.OrderBy(p => p.Name);


p => p.Name это метод (в данном случае). С параметром типа Product и результатом типа string. Ничего явно мы не писали.


--------------------
PM MAIL ICQ Skype   Вверх
KelTron
Дата 17.5.2010, 04:52 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: нет
Всего: 38



Цитата(GoldFinch @  15.5.2010,  10:56 Найти цитируемый пост)
какбэ не всегда программисту известен тип того с чем он работает

Тогда и выведение типов не поможет, оно совсем не для этого..

Добавлено через 9 минут и 46 секунд
Цитата(Любитель @  16.5.2010,  11:52 Найти цитируемый пост)
К доступным извне - нет. К "локальным", если такое понятие есть в языке - да

По моему он про другое, т.е. можно ли в определении функции возвращаемый тип описывать как var / auto.
Так делать нельзя, ибо var / auto это НЕ тип, это ключевое слово языка, которое говорит компилеру, чтобы тот сам определил тип по выражению в правой части...

Это сообщение отредактировал(а) KelTron - 17.5.2010, 04:56


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
Любитель
Дата 17.5.2010, 05:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(KelTron @  17.5.2010,  04:52 Найти цитируемый пост)
По моему он про другое, т.е. можно ли в определении функции возвращаемый тип описывать как var / auto.
Так делать нельзя, ибо var / auto это НЕ тип, это ключевое слово языка, которое говорит компилеру, чтобы тот сам определил тип по выражению в правой части...

А чем лямбды (в случае использования их как делегатов, а не как expression tree) не являются функцией? Для которой мы не задаём (явно) возвращаемый тип. В случае какого-нибудь Nemerle можно описать и вполне себе именованную локальную функцию:
Код

def SomeMethod(products : IEnumerable[Product]) : void
{
    def ProductNameSelector(p) { p.Name };
    def orderedProducts = products.OrderBy(ProductNameSelector);
    // ...
}


В то же время можно пользоваться и лямбдами (более похоже на шарповский вариант):
Код

def SomeMethod(products : IEnumerable[Product]) : void
{
    def orderedProducts = products.OrderBy(fun(p) { p.Name });
    // ...
}


Для методов же класса (а не локальных функций) в Nemerle вывод типов принципиально не поддерживается тоже.


--------------------
PM MAIL ICQ Skype   Вверх
mrbrooks
Дата 17.5.2010, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: нет
Всего: 306



Для C# - определенно добро - учитывая как в .Net любят обзывать классы, да и при работе с LINQ удобно.

Хотя, по большому счету, syntactic sugar.
PM MAIL   Вверх
Страницы: (5) Все 1 2 [3] 4 5 
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.4451 ]   [ Использовано запросов: 24 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.