Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[13.59.218.147] |
|
Страницы: (4) 1 2 [3] 4 все ( Перейти к последнему сообщению ) |
Сообщ.
#31
,
|
|
|
Цитата _lcf_ @ ну почти в любом коде-стайле есть какое-то соглашение на этот счёт, у нас стандартное m_ да, и чистых сей у нас не так много, кутэ + куча своих враперов. Повторюсь, у нас нельзя использовать префиксы, в любом виде. У нас любой префикс - признак низкоуровневой библиотеки, а в таких библиотеках свои наборы соглашений. Цитата _lcf_ @ и что-то я, блин, не вижу там обилия :: как и не страдаю от отсутствия каких-то подсказок Это скорее исключение из правил. Твои слова можно легко подтвердить или опровергнуть, для этого достаточно посадить за ваши исходники нового программиста, и посмотреть как он будет осваиваться в этом проекте. По его реакции и можно судить о том есть ли реальные страдания в процессе программирования или нет) |
Сообщ.
#32
,
|
|
|
Цитата VisualProg @ для этого достаточно посадить за ваши исходники нового программиста, и посмотреть как он будет осваиваться в этом проекте ну я кагбэ 4 месяца тут работаю |
Сообщ.
#33
,
|
|
|
Цитата _lcf_ @ ну я кагбэ 4 месяца тут работаю Если у тебя нет ни к чему притензий, значит проект действительно хорошо спроектирован. У меня же по чужим исходникам могут возникать различные вопросы, особенно когда под рукой нет полноценной IDE. Значит я просто не имею такого опыта в разработке как у тебя) |
Сообщ.
#34
,
|
|
|
Цитата _lcf_ @ помоему это паранойя вспомнился анекдот про еврея, десять замков и цепочку. может оно, конечно, и правильно, но как по мне так избыточно. Это не паранойя, это здравый смысл, потому как потом, когда ты откроешь незнакомый тебе код и увидишь что то типа: SomeMethod(...) { auto t = now(); ... return t; } То будешь долго морщить лоб, и гадать - ээээ, а что такое now, и какого это все типа, и откуда это все взялось. Т.е. когда ты вот так открываешь неймспейсы, ты сразу в несколько раз ухудшаешь читабельность кода. Цитата _lcf_ @ вот с точки зрения компиля аргумент интересный, но я в этом не силен. типо явное указание пространства как-то ускоряет парсинг, сокращает время сборки или что? Скорее просто компилятор отбросит весь мусор, который не подключен через пространство имен. А если подключит, то может не отбросит, ну и когда ты пишешь явно пространство имен, ты избегаешь колизий. Плюс читабельность кода возрастает в несколько раз. Вот например во многих конторах любят переписать работу со строками/потоками под себя, или еще с чем то, а потом ты сидишь и думаешь стандартный это класс или свой внутренний. Ясно что стандартный вроде, но иногда это здорово запутывает. А когда явно пишешь std::string, то сразу видно откуда он взятый. |
Сообщ.
#35
,
|
|
|
Цитата KILLER @ Вот например во многих конторах любят переписать работу со строками/потоками под себя, или еще с чем то, а потом ты сидишь и думаешь стандартный это класс или свой внутренний. Ясно что стандартный вроде, но иногда это здорово запутывает. А когда явно пишешь std::string, то сразу видно откуда он взятый. Или стандартные коллекции со своими thread-safe плюшками |
Сообщ.
#36
,
|
|
|
Цитата VisualProg @ Если у тебя нет ни к чему притензий, значит проект действительно хорошо спроектирован. я не говорил, что претензий нет вообще, я говорил за неймспейсы Цитата VisualProg @ У меня же по чужим исходникам могут возникать различные вопросы, ну и опять же когда совсем туго есть тимлид. Цитата KILLER @ когда ты откроешь незнакомый тебе код и увидишь что то типа: Цитата KILLER @ То будешь долго морщить лоб, и гадать - ээээ, а что такое now эм, ну такое сплошь и рядом, ctrl+клик - в чём проблема? ну а переписывать стандартные функции с тем же именем - это первая глупость. вторая - использовать их без явного указания пространства. |
Сообщ.
#37
,
|
|
|
Цитата _lcf_ @ эм, ну такое сплошь и рядом, ctrl+клик - в чём проблема? Ну выдаст тебе 4-5 разных реализаций now с разных библиотек, включая стандартную, какую нибудь бустовскую, еще какую нибудь внутрению и еще парочку с каких нибудь ATL/MFC, и сиди думай - какая из них вызовется. Да, может ты догадаешься какая из найденных используется в твоем случае, но и время потеряешь. А если у тебя будет сразу указано откуда это взялось - тебе достаточно посмотреть на эту написанную строку, и не нужно ничего гадать и искать. |
Сообщ.
#38
,
|
|
|
какой заяц, какой орёл, какая блоха!? (С)
вот не бывает у меня таких ситуаций почему-то, ну или я их не запоминаю... почему-то мне кажется, что если такая ситуация возникла, то надо давать пинка лентяйм-любителям auto, чтобы явно писали, что они вызывают. Добавлено и чем, кстати, запись: auto d = blabla::some::get_iterator (); будет отличаться от: blabla::some::iterator d = get_iterator (); |
Сообщ.
#39
,
|
|
|
Цитата _lcf_ @ почему-то мне кажется, что если такая ситуация возникла, то надо давать пинка лентяйм-любителям auto, чтобы явно писали, что они вызывают. ну или любителям открывать неймспейсы Добавлено Цитата _lcf_ @ и чем, кстати, запись: У Майерса написано что auto предпочтительнее, так как тип данных задает компилятор и он будет максимально соответствовать тому, что ты присваиваешь. А сам ты можешь написать так, а например iterator() у тебя возвращает какой нибудь константный объект. Или например как любят писать некоторые: std::vector<int> vint; vint.push_back(1); for( int idx = 0; idx < vint.size(); ++idx) { ... } Вот тут уже будет трабла, варнинг какой нибудь, а если ты напишешь так: std::vector<int> vint; vint.push_back(1); for( auto idx = 0; idx < vint.size(); ++idx) { ... } То траблы не будет. В первом случае у тебя небезопасное преобразование из size_t(который unsigned int) в int, во втором случае все ок, idx будет типа size_t. Ну и сокращает написание вот этих вот blabla::some::iterator d до 4 букв. |
Сообщ.
#40
,
|
|
|
Цитата KILLER @ Вот тут уже будет трабла, варнинг какой нибудь, фиксить надо. весьма рад, что на новой работе ворнинги запрещены. заелся на старой среди туевой хучи ворнингов искать еррор из-за которого не компилиться. причем ворнинги как раз похожие и были: compare signed/unsigned, unused parameter... Цитата KILLER @ Ну и сокращает написание вот этих вот blabla::some::iterator d до 4 букв. ничего не сокращается, просто из левой части в правую переезжает. |
Сообщ.
#41
,
|
|
|
Цитата _lcf_ @ ничего не сокращается, просто из левой части в правую переезжает. В каком смысле из левой в правую переезжает? В правой части оно всегда почти есть, а в левой тебе или тип придется писать или auto или извращаться со всякими typedef'ами. Например вот есть вот такой код: std::map<std::string, std::vector<std::string>> GetCategories(const std::string& CatId) { } int main() { auto categories = GetCategories(CatId); for(auto It = categories.begin(); It != categories.end(); ++It) {... } } Попробуй переписать без auto. Добавлено Ну и самое наверное хорошее что несет в себе auto, это то, что если вдруг изменится тип, то по сути ничего переписывать не придется, ну если он конечно не кардинально изменился. |
Сообщ.
#42
,
|
|
|
киля, дыва таки даёт о себе знать
Цитата KILLER @ Ну выдаст тебе 4-5 разных реализаций now с разных библиотек, где в твоем куске кода какие-либо неймспейсы из которого вылазит GetCategories Добавлено против auto я ничего не имею, кроме случаев, когда он порождает неоднозначность. |
Сообщ.
#43
,
|
|
|
Цитата _lcf_ @ где в твоем куске кода какие-либо неймспейсы из которого вылазит GetCategories Ты тоже чтоль дыва пыхнул? Ты перечитай о чем идет речь. Смотри ты пишешь чем отличается написание: auto iterator = lala от trololo::lolo::bugaga iterator = lala; Я тебе пишу тем то и тем то, плюс ко всем не нужно писать огород из всех этих trololo::lolo::bugaga, достаточно написать 4 буквы. Ты мне в ответ написал что ниче там не сокращается, а " просто из левой части в правую переезжает. " Я твоего ответа не понял, переспросил что ты имеешь ввиду и привел тебе пример. Причем тут вложенные неймспейсы? Добавлено при работе с итераторами в STL, основная проблема в ненаписании вложенных неймспейсов типа там std::chrono, основная проблема написать вот такие вот конструкции как выше, аля: std::map<std::string, std::vector<std::string>>::const_iterator мать его. Тут ты уже ниче не откроешь чтоб сократить запись до пары символов, тут придется или auto писать или какой нибудь typedef. Добавлено Я могу понять, когда некоторые называют свои пространства имен как хз кто, типа там: namespace This_is_my_mega_super_puper_namespace {} Тогда да, задолбаешься такое набирать на каждой строчке. А когда неймспейс состоит из 2-4 символов, это только помогает быстро писать, с помощью того же автокомплитера и подсказок. Особенно когда у тебя куча всяких неймспейсов, а как там называется класс ты не помнишь, но помнишь первые несколько букв или даже слово. |
Сообщ.
#44
,
|
|
|
Цитата KILLER @ Смотри ты пишешь чем отличается написание: auto iterator = lala от trololo::lolo::bugaga iterator = lala; начинай сначала... Цитата KILLER @ auto t = now(); Цитата KILLER @ Ну выдаст тебе 4-5 разных реализаций now с разных библиотек то есть, подразумевалось, что надо написать: auto t = some::foo::bar::now () так? тогда я и спрашиваю, а чем, собсено, эта запись отличается от: some::foo::bar::value_of_now t = now (); |
Сообщ.
#45
,
|
|
|
Тем, что во втором случае ты с лева почемуто написал всю цепочку неймспейсов, а now вызвал почему то без перечисления неймспейсов. А вообще выше я вроде ответил уже.
|