Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > имена переменных


Автор: fish9370 17.7.2011, 20:03
тема взята из соседнего поста, показалась интересной..

пишите, кто какой стиль предпочитает и как он придумывает названия именам переменных..
пользуется ли кто-то еще транслитом?

Автор: Сыроежка 17.7.2011, 20:17
Во-первых, стиль программирования порой диктуется уже той средой, в которой вы программируете, как, например, имеет место в Windows или MFC.

Обычно в проектах польуются одновременно разными стилями названия переменных. Например, один программист для одной переменной может использовать подчеркивание для разделения слов в идентификаторе, в то время как для другого идентификатора порой проще объединить два слова в одно без всяких разделителей. Кроме того, есть переменные, которые обозначают флаги. Обюычно они пишутся в венгерской нотации. Кроме того для простых функций или простых объектов можно вообще использовать одну букву для имени переменной, как, например, s - для символьного массива, p - для указателя, а n - для целочисленного значения и т.д. Иногда для простыты имя переменной состоит лишь из двух символов, которые означают названия слов.

Например, имеется тип данных REQUEST HEADER. Для переменной этого типа в одном проекте использовалась имя rh. И поверьте, это было лучшее имя, которое можно придумать для переменной этого типа!smile

На самом деле для больших проектов главное, чтобы одни и те же объекты в разных модулях обозначались одними и теми же именами переменных.. 

Автор: azesmcar 18.7.2011, 07:44
Цитата(Сыроежка @  17.7.2011,  20:17 Найти цитируемый пост)
Например, имеется тип данных REQUEST HEADER. Для переменной этого типа в одном проекте использовалась имя rh. И поверьте, это было лучшее имя, которое можно придумать для переменной этого типа!

Не верю © smile 

Автор: Earnest 18.7.2011, 09:34
Странные какие-то ответы, не то что не исчерпывающие, но вообще винегрет. Именование переменных - часть стиля; он обычно корпоративный, так удобнее работать. Я для своей команды сделала документ, компиляцию из какого-то распространенного англоязычного источника и своих домыслов. Транслит запрещен, ибо меня от него колбасит.
До сих пор вспоминаю яркий образец вида - чью-то процедуру на Фортране с именем OBLOPR, что означало "область определения". smile 

Автор: k0rvin 18.7.2011, 09:40
Цитата(Earnest @ 18.7.2011,  09:34)
Транслит запрещен, ибо меня от него колбасит.

плюсую, хочется сразу убить автора такого имени. хорошо еще когда транслит правильный, английский, а то бывает такое, шо ###

Автор: fish9370 18.7.2011, 09:56
Цитата(Earnest @  18.7.2011,  09:34 Найти цитируемый пост)
Странные какие-то ответы, не то что не исчерпывающие, но вообще винегрет. Именование переменных - часть стиля; он обычно корпоративный, так удобнее работать


Вы как женщина опытная (как я понял), должны понять, что речь идет о  стадии, когда проект только начинается, и Ваши предпочтения закладываются в корпоративный стиль.. 

кстати, по стилю, можно определить к какой "школе" человек относится.. как тут было правильно подмеченно, сразу видно где у него больше всего опыта, Linux, Windows, MFC и т.д.


Цитата(Сыроежка @  17.7.2011,  20:17 Найти цитируемый пост)
Например, имеется тип данных REQUEST HEADER. Для переменной этого типа в одном проекте использовалась имя rh


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

Добавлено @ 09:57
P.S. за транслит убил бы сразу..

Автор: borisbn 18.7.2011, 10:07
Цитата(Сыроежка @  17.7.2011,  20:17 Найти цитируемый пост)
Во-первых, стиль программирования порой диктуется уже той средой, в которой вы программируете, как, например, имеет место в Windows или MFC.

Что есть, то есть. Правда за весь Windows я бы не говорил... Вот, например, когда мне нужна программа на чистом Си++ (STL, boost), то я и переменные_называю_с_подчеркиванием. Если в Qt лабаю - поВерблюжачиНазываю. А когда ещё с VCL работал (как вспомню - так вздрогну) все ТТипыНазвалВИхСтиле.

А по именованию - ну есть же правила
Цитата

типы и объекты - существительные
свойства объектов - прилагательные
функции, методы объектов - глаголы


Цитата(fish9370 @  17.7.2011,  20:03 Найти цитируемый пост)
пользуется ли кто-то еще транслитом?

Убил бы за vvod_massiva. Особенно весело смотрится транслитерация слова "файл" smile

P.S. Ещё нравится иногда встряхиваться smile
Код

struct Simpson { ... };
struct Homer : public Simpson { ... };
struct Bart : public Simpson { ... };
struct Lisa : public Simpson { ... };


такое, правда, нужно особенно тщательно документировать

Добавлено через 3 минуты и 28 секунд
Цитата(Earnest @  18.7.2011,  09:34 Найти цитируемый пост)
Я для своей команды сделала документ, компиляцию из какого-то распространенного англоязычного источника и своих домыслов

Не поделишься ? Распространять не собираюсь. Прошу для личного пользования

Автор: Earnest 18.7.2011, 10:31
Да ради бога. Исользуйте как хотите: это перевод одного из валяющихся в сети документов с моей редакцией.

Добавлено через 2 минуты и 58 секунд
Правде, время показало, что не все прижилось. Скажем, функции я именую в основном с большой буквы. Булевские переменные не начинаю с "is". Но это все мелочи. Нельзя вообще все зарегламентировать, должна быть некоторая свобода в соответствии с собственным вкусом.

Автор: borisbn 18.7.2011, 10:44
Earnest, спасибо. Где-то я это видел... О! http://geosoft.no/development/cppstyle.html.

Да ты собственно и не скрывала   smile  
Цитата(Earnest @  18.7.2011,  10:31 Найти цитируемый пост)
это перевод одного из валяющихся в сети документов с моей редакцией


Автор: Qu1nt 18.7.2011, 10:56
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml.

Автор: Earnest 18.7.2011, 11:28
Цитата(borisbn @  18.7.2011,  11:44 Найти цитируемый пост)
 Где-то я это видел... 

Ну да, я там честно сохранила копирайт.

Автор: Сыроежка 18.7.2011, 20:00
Цитата(fish9370 @  18.7.2011,  09:56 Найти цитируемый пост)
действительно, часто встречаются очень удачные аббривиатуры (как в данном примере).. но мне кажется, что это хорошо, когда есть документация, чтобы человек со стороны как-то мог разобраться, что она значит..



Как я уже сказал, если одно и тоже имя используется для одного и того же объекта во всех модулях проекта, то документация не требуется.  Поэтому я и указал, что очень важно сохранять использование одного  и того же имени.

Более сложные проблемы возникают, когда вы пишите макросы. В них вы передаете идентификатор, а внтури макроса нужно создать другой идентификатор для подобного же объекта. Здесь тоже требуется некоторая система, так как порой могут возникнуть серьезные ошибки, что вы в макросе можете использовать имя, которое "закроет" собой имя переменной из основного кода.

Автор: fish9370 20.7.2011, 10:36
Цитата(Сыроежка @  18.7.2011,  20:00 Найти цитируемый пост)
то документация не требуется


документация в любом случае нужна..

Автор: borisbn 20.7.2011, 10:37
fish9370, ты не прав - по стандарту документировать ничего не требуется  smile 

Автор: Earnest 20.7.2011, 11:28
Цитата(fish9370 @  20.7.2011,  11:36 Найти цитируемый пост)
документация в любом случае нужна.. 

Это сложный вопрос на самом деле. Документация к коду ИМХО не нужна (код должен быть самодокументирован, включая подробные комментарии к сложным местам, либо ссылки на первоисточники для неочевидных алгоритмов). "Стратегические" документы (типа функциональной спецификации на разработку конкретного модуля \ утилиты или   описание дизайна программы) очень желательны. К сожалению, поддерживать их в актуальном состоянии очень сложно...

Автор: baldina 20.7.2011, 11:29
Цитата

какого стиля вы придерживаетесь при создании переменных?

бытие определяет сознание. жаль, что только один вариант ответа.
а что насчет смешения стилей? часто в одном проекте используются библиотеки с разными принципами именования. пример - MFC и STL. какой стиль выбрать? что делать (и нужно ли), что бы код смотрелся единообразно?

Автор: borisbn 20.7.2011, 12:52
Цитата(Earnest @  20.7.2011,  11:28 Найти цитируемый пост)
код должен быть самодокументирован

 smile Был у нас один "программист" (сейчас уже уволился), который на полном серьёзе (не прикалываясь) писал такое:
Код

// Цикл по internal_cicle_counter от 0 до n-1
for ( int internal_cicle_counter = 0; internal_cicle_counter < n; internal_cicle_counter++ ) {
  // получаем указатель на структуру и т.д.
  SomeStruct * some_struct_pointer_for_foo_function_call = m_buffer[ internal_cicle_counter ].ptr;
  // вызываем функцию foo с параметром и т.п.
  foo( some_struct_pointer_for_foo_function_call );
}

В общем, крайности всегда плохо. И совсем без комментариев нельзя, и перегружать код лишними комментариями - тоже вредно.

Автор: fish9370 20.7.2011, 12:56
Цитата(Earnest @  20.7.2011,  11:28 Найти цитируемый пост)
Документация к коду ИМХО не нужна


Цитата(Earnest @  20.7.2011,  11:28 Найти цитируемый пост)
"Стратегические" документы (типа функциональной спецификации на разработку конкретного модуля \ утилиты или   описание дизайна программы) очень желательны


я не совсем понимаю, что такое документация к коду, мне кажется документация к коду это комменты (и они кстати тоже нужны)..
но то что ни один серьезный проект без документации не обходится - это безусловный факт.. я тут не вижу оснований для спора..

Автор: Earnest 20.7.2011, 15:25
Цитата(borisbn @  20.7.2011,  13:52 Найти цитируемый пост)
 И совсем без комментариев нельзя, и перегружать код лишними комментариями - тоже вредно. 

Разумеется, я не такие комментарии имела в виду. За такое нужно сразу убивать. Самодокументированность - это четкая логическая структура, ясные имена переменных и необходимый минимум комментариев.
Цитата(fish9370 @  20.7.2011,  13:56 Найти цитируемый пост)
я не совсем понимаю, что такое документация к коду
. 
Я под этим понимаю описание классов и их функций. Типа функция XXX класса YYY делает то-то. Как отдельный документ. Считаю, что это лишняя трата времени - и того, кто пишет, и того, кто читает. Такого рода информация нужна только разработчикам, а они могут и код посмотреть (уж точно актуальную инфу получат). А если код в этом смысле написан плохо, то разумнее потратить время на его улучшение, чем не его же описание.
Разумеется, если продукт - не библиотека, предназначенная для внешнего распространения.

Автор: azesmcar 21.7.2011, 20:38
borisbn

У нас не до такой степени, но все же комментарии, чаще встречающиеся в нашем кода
Код

// draw busy cursor
drawBusyCursor();


Автор: toxx 21.7.2011, 21:50
borisbn,
azesmcar
Ктото из вас написал что коментарии нужны в самых сложных местах, тоже с этим согласен, в остальном должны быть интуитивно понятные названия методов и переменных.
А так, как я понял, стиль формируется в зависимости от конкретной команды и тимлидера(в соответствии с его стилем обычно пишут)
Поэтому считаю позицию Earnest верной по созданию дока со стилем.

Автор: borisbn 21.7.2011, 22:37
Цитата(toxx @ 21.7.2011,  21:50)
borisbn,
azesmcar
Ктото из вас написал что коментарии нужны в самых сложных местах, тоже с этим согласен, в остальном должны быть интуитивно понятные названия методов и переменных.
А так, как я понял, стиль формируется в зависимости от конкретной команды и тимлидера(в соответствии с его стилем обычно пишут)
Поэтому считаю позицию Earnest верной по созданию дока со стилем.

ни тот, ни тот, а как раз Earnest:
Цитата(Earnest @  20.7.2011,  11:28 Найти цитируемый пост)
код должен быть самодокументирован, включая подробные комментарии к сложным местам

Автор: boostcoder 22.7.2011, 10:14
мне очень не нравится Google's C++ style guide.
совсем случайно наткнулся на эту тему: http://stackoverflow.com/questions/5695082/boost-library-acceptance-in-industry
радует что не мне одному он кажется нелепым. особенно запрет использовать исключения и обильно шаблоны... smile 

Автор: fish9370 22.7.2011, 12:09
Цитата(boostcoder @  22.7.2011,  10:14 Найти цитируемый пост)
мне очень не нравится Google's C++ style guide.совсем случайно наткнулся на эту тему: http://stackoverflow.com/questions/5695082...nce-in-industryрадует что не мне одному он кажется нелепым. особенно запрет использовать исключения и обильно шаблоны...


с позиции Сишника (мне не нравятся все эти ваши примочки), я считаю, что это вполне оправданно.. код упрощается, значит меньше ошибок.. по поводу исключений, так там с примером показанно какие косяки с этим могут быть..

Автор: Earnest 22.7.2011, 12:25
Цитата(fish9370 @  22.7.2011,  13:09 Найти цитируемый пост)
код упрощается, значит меньше ошибок..

Код упрощается? При неиспользовании исключений? Да ладно! Букв становится больше - ошибки-то все равно обрабатывать нужно. А больше букв - больше возможностей случайно напортачить.
Косяки могут возникнуть какие угодно и где угодно. Все зависит от квалификации кодеров. Нет способа защититься от кривых рук, кроме превентивного отстрела. Но как распознать кривые руки еще до того, как они успели нанести ущерб - вот вопрос... smile 

Автор: fish9370 22.7.2011, 14:17
Цитата(Earnest @  22.7.2011,  12:25 Найти цитируемый пост)
Код упрощается? При неиспользовании исключений?


нет, при неиспользовании Си++
А здесь пошли на компромис, между чистым Си и Си++, код стал проще - меньше ошибок, со стороны "криворуких" кодеров..
криворуких взял в кавычки, так как сам язык к этому распологает, это кстати попытка сделать из них пряморуких.. 

Автор: boostcoder 22.7.2011, 14:19
Цитата(fish9370 @  22.7.2011,  14:17 Найти цитируемый пост)
при неиспользовании Си++

да ну ладно ;)
тебе уже не раз примеры приводили, что с++ код проще. главное иметь прямой моцг.

Цитата(fish9370 @  22.7.2011,  14:17 Найти цитируемый пост)
криворуких взял в кавычки, так как сам язык к этому распологает, это кстати попытка сделать из них пряморуких.

не-не-не! причина в моцге!

Добавлено через 4 минуты и 28 секунд
вот тебе еще парочка.
банальное получение списка элементов на ФС в текущем каталоге.
1.
Код

#include <boost/filesystem.hpp>
#include <iostream>
 
int main() {
   boost::filesystem::recursive_directory_iterator beg("."), end;
   for ( ; beg != end; ++beg ) {
      std::cout << *beg << std::endl;
   }
}

http://liveworkspace.org/code/840584682a731c348df6c8cd75a70848

2.
Код

#include <boost/filesystem.hpp>
#include <iostream>
#include <algorithm>
 
void printer(const boost::filesystem::path& path) {
   std::cout << path << std::endl;
}
 
int main() {
   std::for_each(
      boost::filesystem::recursive_directory_iterator("."),
      boost::filesystem::recursive_directory_iterator(),
      printer
   );
}

http://liveworkspace.org/code/a137f45778dc33877002ba5aeda118bd

3.
Код

#include <boost/filesystem.hpp>
#include <iostream>
#include <algorithm>
#include <vector>
 
void printer(const boost::filesystem::path& path) {
   std::cout << path << std::endl;
}
 
int main() {
   std::vector<boost::filesystem::path> list(
      boost::filesystem::recursive_directory_iterator("."),
      boost::filesystem::recursive_directory_iterator()
   );
   
   std::for_each(std::begin(list), std::end(list), printer);
}

http://liveworkspace.org/code/457efd76e5d46383738034951d1668eb


покажи Си`шный эквивалент ;)

Добавлено через 8 минут и 26 секунд
вдобавок: с++, с++су рознь.
ибо даже в Qt("Си с классами" (с) я) это сделано криво.
Код

QDirIterator it("/etc", QDirIterator::Subdirectories);
 while (it.hasNext()) {
     qDebug() << it.next();

     // /etc/.
     // /etc/..
     // /etc/X11
     // /etc/X11/fs
     // ...
 }


вот и пойми кто тут не прямой)

Автор: Earnest 22.7.2011, 15:25
Цитата(boostcoder @  22.7.2011,  15:19 Найти цитируемый пост)
причина в моцге!

Ничо подобного! Причина как раз в его отсутствии! smile 
Цитата(fish9370 @  22.7.2011,  15:17 Найти цитируемый пост)
 это кстати попытка сделать из них пряморуких..  

Это из области мифологии, к сожалению... Если у человека нет нужной хромосомы, то как задачу не упрощай - все равно найдет возможность сделать глупость. 
Нельзя упрощать до бесконечности - на упрощение\ разбиение придется потратить больше времени, чем на решение задачи самому. Так что смысла никакого, кроме 100% занятности населения. smile 
Понятно, у Гуглов может быть свое мнение на этот счет, и они имеют на это право. Как и мы.

Добавлено через 2 минуты и 50 секунд
Цитата(boostcoder @  22.7.2011,  15:19 Найти цитируемый пост)
покажи Си`шный эквивалент ;)

Да, кстати еще один аргумент в пользу шаблонов и всяких бустов. Если умудрился написать подобное выражение так, что оно скомпилировалось, то очень много шансов за то, что оно работает правильно. Простой код таких "гарантий" не дает. smile 

Автор: fish9370 22.7.2011, 15:40
Цитата(boostcoder @  22.7.2011,  14:19 Найти цитируемый пост)

#include <boost/filesystem.hpp>
#include <iostream> 
int main() {
       boost::filesystem::recursive_directory_iterator beg("."), end;
       for ( ; beg != end; ++beg ) {
              std::cout << *beg << std::endl;
       }
}


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

ну и пока ты используешь, отлаженую библиотеку, полагаю все классно, но когда начинается реальный проект с кучей участников, где как вы правильно заметили, не поймешь, кто с какими руками, вот тогда и начинается танец с бубном (не знаю я проектов на бусте, мне просто так кажется)

на Си я код напишу, сразу как появится время..

Автор: boostcoder 22.7.2011, 15:49
fish9370, естественно, что это уже оффтоп.
но тем не менее...

Цитата(fish9370 @  22.7.2011,  15:40 Найти цитируемый пост)
я говорил про простой код

в простом коде(самописном), как показывает практика, больше шансов нагородить ошибок, как ты недавно заметил в теме где ты написал функцию strcmp().

Цитата(fish9370 @  22.7.2011,  15:40 Найти цитируемый пост)
этот код сложен тем, что не зная буста (как в моем случае), сложно понять, что тут вообще происходит

ну вот видишь... а ты про кривизну рук ;)

Цитата(fish9370 @  22.7.2011,  15:40 Найти цитируемый пост)
уверен, что там куча подводных камней

не исключено! но плюс в том, что эти подводные камни отловятся раньше, т.к. этот код юзаю не я один. в смысле boost использую не только я. и это все к тому, что: не нужно городить то, что давно нагорожено.

Цитата(fish9370 @  22.7.2011,  15:40 Найти цитируемый пост)
но когда начинается реальный проект с кучей участников, где как вы правильно заметили, не поймешь, кто с какими руками, вот тогда и начинается танец с бубном

в реальных проекта, как правило, наказывают за рукоблудие. по причинам написанным выше.

Цитата(fish9370 @  22.7.2011,  15:40 Найти цитируемый пост)
не знаю я проектов на бусте, мне просто так кажется

к примеру: http://www.boost.org/users/uses_shrink.html

Добавлено через 5 минут
а вообще, я знаю очень мало проектов на плюсах, написанных не теми кто учился программировать по доке Qt, не использующих boost.
сейчас, благо, boost.type_traits и boost.thread перешли в стандарт. это уже в некоторой степени позволяет отвязаться от boost. но все равно многого не хватает:
asio.
mpl.
fusion.
function_types.
filesystem.
iostreams.
e.t.c...

Автор: fish9370 22.7.2011, 16:21
Цитата(boostcoder @  22.7.2011,  15:49 Найти цитируемый пост)
в простом коде(самописном), как показывает практика, больше шансов нагородить ошибок, как ты недавно заметил в теме где ты написал функцию strcmp()


не смотря на то что, этот инцидент действительно имел место быть, я все-равно буду настаивать на своем.. эта функция относится к разряду фундаментальных, ей бы стоило уделить больше внимания, в том числе и к производительности.. такие функции обычно являются ядром проекта и после тщательного тестирования переносятся из проекта в проект без изменений (сам люблю хорошие функции дернуть)..

в твоем случае, все тоже самое, те же библиотеки, с проверенными функциями или классами, но беда Си++ в том, что объекты на порядок сложнее, и распутывать клубок из множественного наследования, с кучей перегрузок, исключений и т.д. становится не интуитивно понятно (так кажется мне, и похоже не только мне, если так вопрос поставили в google)


Цитата(boostcoder @  22.7.2011,  15:49 Найти цитируемый пост)
ну вот видишь... а ты про кривизну рук ;)

это ты так подколол? сказать по-правде, тут часто можно услышать - кривые руки, нет мозгов и т.п.. а чем это измеряется? кто тут судья? я бы понял, если бы с нами был Линус Торвальдс, Марк Спенсор, Игорь Сысоев, да любой другой человек, которому есть чем гордиться..
если вам есть чем гордится, продемонстрируйте или прекратите бросаться такими громкими словами..

Автор: baldina 22.7.2011, 16:47
Цитата(fish9370 @  22.7.2011,  16:21 Найти цитируемый пост)
распутывать клубок из множественного наследования, с кучей перегрузок, исключений и т.д.

обычно его не надо распутывать: пользуются публичным интерфейсом, остальное за кулисами. тем-то ООП и хорошо.
конечно, что бы изучить большой проект или, скажем, библиотеку, требуется время.
но на С все это будет выглядеть огромным списком структур и функций, и только внятное описание (если оно есть) поможет разобраться.
в С++ структура присутствует в самом коде, и разобраться при прочих равных проще

Автор: fish9370 22.7.2011, 16:52
Цитата(boostcoder @  22.7.2011,  15:49 Найти цитируемый пост)
к примеру: http://www.boost.org/users/uses_shrink.html


как-то мало высоконагруженных сетевых приложений, да и фотошоп CS2 мне почему-то казалось, что написан на .net (так уж он притормаживал), не знаю, что и сказать, чтобы не коим образом никого не обидеть..

Цитата(baldina @  22.7.2011,  16:47 Найти цитируемый пост)
в С++ структура присутствует в самом коде, и разобраться при прочих равных проще


почему-то мне кажется, что это субъективно.. разбираться с кодом мне помогает doxygen (спасибо создателям)..

Автор: bsa 22.7.2011, 16:57
fish9370, скажи, какой у тебя уровень знаний С++ и какой опыт работы на нем?

Автор: boostcoder 22.7.2011, 18:12
Цитата(fish9370 @  22.7.2011,  16:21 Найти цитируемый пост)
это ты так подколол?

нет. забудь...

Добавлено через 3 минуты и 33 секунды
Цитата(fish9370 @  22.7.2011,  16:52 Найти цитируемый пост)
как-то мало высоконагруженных сетевых приложений

во первых - это критерий?
во вторых - а что еще использовать для сетевых приложений кроме как asio? ;)
пример: http://forum.vingrad.ru/forum/topic-321942.html

Автор: fish9370 22.7.2011, 20:30
Цитата(bsa @  22.7.2011,  16:57 Найти цитируемый пост)
скажи, какой у тебя уровень знаний С++ и какой опыт работы на нем?


если скажу, что нулевой, то совру.. но я хочу избежать его использование в своей жизни по максимуму.. при этом я влюблен в Си.. мне нравятся решения на Си.. я люблю из изучать, читать, думать о софте на Си..  smile 

при этом это всего лишь мое хобби..

спасибо, что спросил..

Автор: bsa 22.7.2011, 20:52
Цитата(fish9370 @  22.7.2011,  20:30 Найти цитируемый пост)
если скажу, что нулевой, то совру..

ты лучше скажи так, как есть: прочитал книжку, видел код, писал простейший код, писал сложный код, понимаю 99% кода, полностью владею 99% возможностей языка.
Просто если один из первых 3-х пунктов, то ты просто не имеешь морального права спорить с людьми, которые принадлежат к остальным 3-м категориям. Потому что получается "не читал, но осуждаю".
Цитата(fish9370 @  22.7.2011,  20:30 Найти цитируемый пост)
я хочу избежать его использование в своей жизни по максимуму.

Вот только не надо никому свое мнение навязывать. Я лично в любом деле выбираю подходящие инструменты (из тех, что у меня есть, и которыми я умею пользоваться), причем не только в области программирования. Надо драйвер или системную утилиту - пишу на С, надо консольную пользовательскую да еще и с кучей наворотов - пишу на С++, нужна с GUI - использую Qt, если Qt слишком жирно использовать, то делаю свои обертки вокруг системных библиотек...
Цитата(fish9370 @  22.7.2011,  20:30 Найти цитируемый пост)
при этом я влюблен в Си.. мне нравятся решения на Си.. я люблю из изучать, читать, думать о софте на Си..

Никогда не думал, что скажу такое, но: в мире еще есть много чего более достойного твоих дум и любви. Не стоит зацикливаться на С. Тем более, что лет через 10 ты со своим С будешь уже никому не нужен (выйдешь из профпригодного возраста), как и многие из здесь постоянно тусующихся...

Автор: fish9370 22.7.2011, 21:28
Цитата(bsa @  22.7.2011,  20:52 Найти цитируемый пост)
Просто если один из первых 3-х пунктов, то ты просто не имеешь морального права спорить с людьми, которые принадлежат к остальным 3-м категориям. Потому что получается "не читал, но осуждаю".


моральное право у меня есть, и книжки читал, и код писал, и в университете мне это втирали.. только давай без квестов обойдемся, мне это давно уже не интересно..

Цитата(bsa @  22.7.2011,  20:52 Найти цитируемый пост)
Тем более, что лет через 10 ты со своим С будешь уже никому не нужен


ха-ха..  smile  вот только не пугай.. Си это мое хобби.. да и срок жизни проектов на Си на порядок больше, чем на Си++ (обычно это обусловленно открытостью кода, но факт есть факт)


Цитата(bsa @  22.7.2011,  20:52 Найти цитируемый пост)
Никогда не думал, что скажу такое, но: в мире еще есть много чего более достойного твоих дум и любви


я тоже не думал, что ты это скажешь, а главное что ты хотел этим сказать?  smile 

Автор: toxx 22.7.2011, 22:08
Цитата

моральное право у меня есть, и книжки читал, и код писал, и в университете мне это втирали.. только давай без квестов обойдемся, мне это давно уже не интересно..

Все что в университете втирают мало пригодно для реальных проектов

Автор: fish9370 23.7.2011, 10:57
Цитата(boostcoder @  22.7.2011,  14:19 Найти цитируемый пост)
покажи Си`шный эквивалент ;)


Код

#include <dirent.h>

void dir(const char *path)
{
        DIR *dp;
        struct dirent *dirp;

        if ((dp = opendir(path)) == NULL) {
                mifi_verbose(LOG_VERBOSE, "no access to directory\n");
                return;
        }

        while ((dirp = readdir(dp)) != NULL) {
                if (strcmp(dirp->d_name, ".") == 0 || strcmp(dirp->d_name, "..") == 0)
                        continue;

                mifi_verbose(LOG_BLUE, "%s\n", dirp->d_name);
        }
       
        closedir(dp);
}


ну и чей код проще?

Автор: boostcoder 23.7.2011, 11:38
fish9370, то что ты написал, это эквивалент этого:
Код

#include <boost/filesystem.hpp>
#include <iostream>
 
int main() {
   boost::filesystem::recursive_directory_iterator beg("."), end;
   for ( ; beg != end; ++beg ) {
   }
}

т.к. результат своего мегакода ты некуда не сохраняешь и использовать его невозможно. разве не очевидно какой код проще? ;)

Автор: fish9370 23.7.2011, 11:44
Цитата(boostcoder @  23.7.2011,  11:38 Найти цитируемый пост)
т.к. результат своего мегакода ты некуда не сохраняешь и использовать его невозможно


хорошо ты победил, твой код проще.. но когда я захочу, чтобы все было просто, я воспользуюсь PHP.. там я могу делать такие вещи, что бусту и не снилось..

Автор: azesmcar 23.7.2011, 11:44
Цитата(fish9370 @  23.7.2011,  10:57 Найти цитируемый пост)
ну и чей код проще?

 smile 

Автор: boostcoder 23.7.2011, 11:47
fish9370, дело не в победе. а в том, что ты отрицаешь очевидные даже для тебя вещи. а это попахивает тараканами.

Цитата(fish9370 @  23.7.2011,  11:44 Найти цитируемый пост)
чтобы все было просто, я воспользуюсь PHP

держите меня семеро smile
значит плюсы не устраивают, а ПХП устраивает? комплексы и предрассудки...

Автор: azesmcar 23.7.2011, 11:50
Цитата(fish9370 @  23.7.2011,  11:44 Найти цитируемый пост)
хорошо ты победил, твой код проще.. но когда я захочу, чтобы все было просто, я воспользуюсь PHP.. там я могу делать такие вещи, что бусту и не снилось.. 

Логическое продолжение:
А в остальное время буду писать на ассемблере, ибо это круто и так поступают настоящие джедаи smile 
Позволю себе заметить, что спор с человеком, для которого программирование на Си - хобби просто напросто лишен смысла. Ты пишешь для удовольствия, профессионал - ради денег, не надо путать одно с другим, у этих двух категорий разные цели.

Автор: fish9370 23.7.2011, 12:00
Цитата(boostcoder @  23.7.2011,  11:47 Найти цитируемый пост)
значит плюсы не устраивают, а ПХП устраивает? комплексы и предрассудки


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


Цитата(boostcoder @  23.7.2011,  11:47 Найти цитируемый пост)
а это попахивает тараканами


а это какая-то непонятная прослойка, между скоростью разработки и производительностью.. да и к тому же я же уже говорил, что мне сложно разбираться в большом коде, если это Си++. да из интересных мне приложений я помню только один это openser на плюсах.. все остальное на Си.. помоему это здравый смысл, а не тараканы.. 

Автор: borisbn 23.7.2011, 12:09
я не в качестве спора... ничего не хочу доказать... просто понравился код:
Код

printf( "%s",
    qPrintable( QDir( "." ).entryList( QStringList() << "*.cpp" << "*.h", QDir::Files | QDir::AllDirs | QDir::NoDotAndDotDot ).join( "\n" ) )
);

догадайтесь, что за библиотека smile

Автор: boostcoder 23.7.2011, 12:27
borisbn, а сколько попыток?

в добавок:
во первых - не рекурсивный обход(или я ошибаюсь?).
во вторых - невозможно управлять обходом.
в третьих - невозможно задать предикат.
в четвертых - со стандартными контейнерами/алгоритмами работает через попу. т.е. только после того как обход закончен, результат можно адаптировать в std::list<std::string>, если не ошибаюсь.
в пятых - одним словом - "Qt".

пожалуй хватит..

Автор: borisbn 23.7.2011, 12:51
Цитата(boostcoder @  23.7.2011,  12:27 Найти цитируемый пост)
а сколько попыток?

4.7.3 smile
тогда я попробую с 1.46.1 попыток угадать, что за библиотека у Вас smile

Автор: borisbn 23.7.2011, 15:36
Цитата(boostcoder @  23.7.2011,  12:27 Найти цитируемый пост)
во первых - не рекурсивный обход(или я ошибаюсь?).

не ошибаетесь
Цитата(boostcoder @  23.7.2011,  12:27 Найти цитируемый пост)
во вторых - невозможно управлять обходом.

для упарвляемого есть http://doc.qt.nokia.com/latest/qdiriterator.html
Цитата(boostcoder @  23.7.2011,  12:27 Найти цитируемый пост)
в третьих - невозможно задать предикат.

можно задавать regEx-овское выражение вместо *.*
Цитата(boostcoder @  23.7.2011,  12:27 Найти цитируемый пост)
в четвертых - со стандартными контейнерами/алгоритмами работает через попу. т.е. только после того как обход закончен, результат можно адаптировать в std::list<std::string>, если не ошибаюсь.

не очень понял, но по-моему это - пункт "во-вторых". Кроме того у QList есть
Цитата
std::list<T> QList::toStdList () const

Цитата(boostcoder @  23.7.2011,  12:27 Найти цитируемый пост)
в пятых - одним словом - "Qt".

Во-первых - угадали с первого раза !
Во-вторых - Вы просто не умеете её готовить... так же, как я boost

Автор: boostcoder 23.7.2011, 15:54
Цитата(borisbn @  23.7.2011,  15:36 Найти цитируемый пост)
для упарвляемого есть это

какой же это итератор? smile 
какому из operation_requirements и type_requirements он соответствует? http://cplusplus.com/reference/std/iterator/ я ничего похожего не нашел. опять тролли сами все придумали и выдали юзверям за чистую монету.

Цитата(borisbn @  23.7.2011,  15:36 Найти цитируемый пост)
можно задавать regEx-овское выражение вместо *.*

предикат способен выполнять действия, а не только проверку.


borisbn, Вы не первый кому я пытаюсь показать что в Qt _очень_многое_ кроме GUI(хотя и это тоже...частично.) сделано как-то по сишному...что ли.. для меня это совершенно не пригодно к использованию.
пора заканчивать. а это на троллинг намекает..

Добавлено @ 16:00
Цитата(boostcoder @  23.7.2011,  15:54 Найти цитируемый пост)
какому из operation_requirements и type_requirements он соответствует?

поставлю вопрос по другому: как "это" использовать со стандартными контейнерами/алгоритмами?

Добавлено @ 16:06
Цитата(borisbn @  23.7.2011,  15:36 Найти цитируемый пост)
Вы просто не умеете её готовить

это вряд ли.

Автор: borisbn 23.7.2011, 16:19
Цитата(boostcoder @  23.7.2011,  15:54 Найти цитируемый пост)
пора заканчивать. я это на троллинг намекает..

из всего вышесказанного вот это поддерживаю smile
Думаю, абсолютно ничего плохого не будет, если каждый останется при своём ИМХО smile

кста, улыбнула расшифровка ИМХО - Имею Мнение. Хрен Оспоришь smile

Автор: boostcoder 23.7.2011, 16:20
Цитата(borisbn @  23.7.2011,  16:19 Найти цитируемый пост)
Имею Мнение. Хрен Оспоришь

в речи так и использую)

Автор: Сыроежка 23.7.2011, 20:32
Цитата(bsa @  22.7.2011,  20:52 Найти цитируемый пост)
Не стоит зацикливаться на С. Тем более, что лет через 10 ты со своим С будешь уже никому не нужен (выйдешь из профпригодного возраста), как и многие из здесь постоянно тусующихся... 


"Профпригодный возраст" для программистов на Западе как раз начинается с 40 лет!  Так что вы путаете профпригодный возраст с тем, что в России как раз набирают на работу молодых и зеленых, которыми легче управлять, так как сам менеджер именно профнепригоден, а потому ему нужны в подчиненные такие же безграмотные, чтобы они не ставили под сомнение компетентность начальника!smile

Добавлено через 8 минут и 40 секунд
Цитата(azesmcar @  23.7.2011,  11:50 Найти цитируемый пост)
Логическое продолжение:
А в остальное время буду писать на ассемблере, ибо это круто и так поступают настоящие джедаи smile 
Позволю себе заметить, что спор с человеком, для которого программирование на Си - хобби просто напросто лишен смысла. Ты пишешь для удовольствия, профессионал - ради денег, не надо путать одно с другим, у этих двух категорий разные цели.


Глупость! Сразу же могу сказать, что вы - не профессионал! Профессионалы как раз пишут ради удовольствия!  Профессионалы пишут качественный код и от этого получают удовольствие. А  вот новички пишут ради денег! Они пишут порой страшный код, который порой сами не понимают, но у них принцип:"Код работает? Тогда какие ко мне претензии? Гоните деньги!" А профессионал всегда переживает, если он не получает удовольствие от кода, и ему кажется, что код мог бы быть написан лучше.

Автор: azesmcar 23.7.2011, 20:49
Цитата(Сыроежка @  23.7.2011,  20:32 Найти цитируемый пост)
Глупость! Сразу же могу сказать, что вы - не профессионал!

 smile 
Да, вы славитесь громогласными, в то же время необоснованными заявлениями.

Цитата(Сыроежка @  23.7.2011,  20:32 Найти цитируемый пост)
Профессионалы пишут качественный код и от этого получают удовольствие.

Да уж, фактически C++ не единственный язык, с которым у вас проблема. У вас еще и с русским проблема. Загляните в словарь и посмотрите значение слова http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%84%D0%B5%D1%81%D1%81%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB.

Цитата(Сыроежка @  23.7.2011,  20:32 Найти цитируемый пост)
Профессионалы как раз пишут ради удовольствия

Я рад, что вы работаете ради собственного удовольствия, надеюсь ваши дети это поймут и оценят, когда им будет не хватать на учебу, еду и одежду.
Для меня лично единственный стимул идти на работу и писать код - это обеспечить должным образом мою семью, a стимулом для написания качественного кода является тот факт, что за плохой много не платят.

Цитата(Сыроежка @  23.7.2011,  20:32 Найти цитируемый пост)
А  вот новички пишут ради денег!

Серьезно? И много новичкам за это платят?

Автор: mes 23.7.2011, 20:52
Цитата(Сыроежка @  23.7.2011,  19:32 Найти цитируемый пост)
Глупость! 
Вы опять подменяете понятия.. В данном случае путаете противопоставления "профессионал/мастер и новичок " и  "профессионал и любитель"..  smile 
 

Автор: mes 23.7.2011, 21:47
Цитата(borisbn @  23.7.2011,  15:19 Найти цитируемый пост)
 если каждый останется при своём ИМХО

всяк кулик своё болото хвалит© ..
 чтоб объективно спорить, надо прежде всего критически относится к своему болоту, иначе каждый и будет тянуть одеяло на свою сторону.. smile

Автор: boostcoder 23.7.2011, 22:10
Цитата(mes @  23.7.2011,  21:47 Найти цитируемый пост)
всяк кулик своё болото хвалит©

эт как обычно smile

Цитата(mes @  23.7.2011,  21:47 Найти цитируемый пост)
надо прежде всего критически относится к своему болоту

стараюсь.

Автор: Сыроежка 24.7.2011, 02:03
Цитата(mes @  23.7.2011,  20:52 Найти цитируемый пост)
Вы опять подменяете понятия.. В данном случае путаете противопоставления "профессионал/мастер и новичок " и  "профессионал и любитель"..   

Я ничего не путаю. Это вы просто в силу соего невысокого интеллекта выдумываете всякие новые определения, так как не в состоянии понять, что я сказал.
Цитата(azesmcar @  23.7.2011,  20:49 Найти цитируемый пост)
Я рад, что вы работаете ради собственного удовольствия, надеюсь ваши дети это поймут и оценят, когда им будет не хватать на учебу, еду и одежду



Деньги зарабатывают и халтурщики, чтобы любой ценой себя прокормить.  Поэтому сегодня они могут работать программистами, а завтра барменами в ресторане. К профессионализму это абсолютно никакого отношения не имеет.

Автор: Сыроежка 24.7.2011, 02:23
Цитата(boostcoder @  23.7.2011,  11:38 Найти цитируемый пост)
fish9370, то что ты написал, это эквивалент этого:

код C++

#include <boost/filesystem.hpp>
#include <iostream>
 
int main() {
   boost::filesystem::recursive_directory_iterator beg("."), end;
   for ( ; beg != end; ++beg ) {
   }
}


т.к. результат своего мегакода ты некуда не сохраняешь и использовать его невозможно. разве не очевидно какой код проще? ;) 


Цитата(fish9370 @  23.7.2011,  11:44 Найти цитируемый пост)
хорошо ты победил, твой код проще.. но когда я захочу, чтобы все было просто, я воспользуюсь PHP.. там я могу делать такие вещи, что бусту и не снилось.. 



Зря вы поспешно согласились. Фактически, вас одурачили. Приведенный код никакого отношения к С++ не имеет. В том смысле, что тот же самый код твы могли бы назвать кодом С, а не С++. Просто автор этого кода сам имеет слабое представление о С++.
Что имеет место по существу? Вы представили реализацию, а автор этого кода не представил реализацию. Только и всего! За его строчками кода стоит реализация, которую он вам не демонстрирует. А эта реализация может быть написана с равным успехом на С и на С++, а потом будут представлены эти строчки кода, и автогр будет заявлять: "Смотрите, какой у меня код короткий!"

Вопрос на самом деле состоит в том, почему эта реализация для С++ уже существует, а для С нет. Вот именно в этом и состоит смысл различия С и С++, а не в том, что вам продемонстрировали некий интерфейс, который можно с одинаковым успехом назвать кодом С, а не С++. Различие состоит в том, что в С++ есть шаблоны. И этот главное различие. Когда есть шаблоны, вы можете писать обобщеннный код, и более того шаблоны стимулируют рнаписание обощенного кода. Поэтому в С++ даже есть целая библиотека шаблонов, хотя все то самое вы можете написать на С. Однако делать на С это трудоемко, так как надо будет писать отдельную реализацию для каждого типа данных. Даже не столько отдельную реализацию, сколько отдельную специализацию для каждого типа. 
Между прочим нельзя исключать такую возможносьть, что в будущемп в стандарт С включат шаблоны. И тогда вообще продемонстрированный код не будет иметь никакого смысла в вопросе различия С и С++.

То есть я хотел сказать, что приведденный код, как наивно думал его автор, на самом деле не раскрывает различия С и С++. Эти различия не такие поверхностные, как этот фокус с ловкостью рук, когда вам приводят конечный интерфейс, который между прочим может выглядеть точно также на С, а не реализацию.


Автор: alexvs11 24.7.2011, 02:39
Цитата(Сыроежка @  24.7.2011,  02:23 Найти цитируемый пост)
И тогда вообще продемонстрированный код не будет иметь никакого смысла в вопросе различия С и С++.

причем тут шаблоны? в примере нет шаблонов


Цитата(Сыроежка @  24.7.2011,  02:23 Найти цитируемый пост)
Что имеет место по существу? Вы представили реализацию, а автор этого кода не представил реализацию.

ни си, ни с++ не представляют возможностей доступа к ФС, так что ни тот, ни другой пример не представляют конечной реализации

Добавлено через 6 минут и 28 секунд
доступа подобного типа конечно smile 

Автор: azesmcar 24.7.2011, 07:51
Цитата(Сыроежка @  24.7.2011,  02:03 Найти цитируемый пост)
Деньги зарабатывают и халтурщики, чтобы любой ценой себя прокормить.  Поэтому сегодня они могут работать программистами, а завтра барменами в ресторане. К профессионализму это абсолютно никакого отношения не имеет. 

Вы еще и читать не умеете? Я прислал ссылку на описание слова профессионал, но вы видимо
Цитата(Сыроежка @  24.7.2011,  02:03 Найти цитируемый пост)
в силу соего невысокого интеллекта

не смогли его понять.
Говоря простым языком, профессионал - человек, который зарабатывает на жизнь своей профессией, а человек, который чем-то занимается исключительно ради удовольствия - любитель, для которого это занятие хобби.

Автор: Сыроежка 24.7.2011, 09:50
Цитата(azesmcar @  24.7.2011,  07:51 Найти цитируемый пост)
Говоря простым языком, профессионал - человек, который зарабатывает на жизнь своей профессией, а человек, который чем-то занимается исключительно ради удовольствия - любитель, для которого это занятие хобби.


Вот когда вы попадете к врачу который вместо аппендикса удалит вам почку, вот тогда вы сразу же поймете, кто профессионал, а кто нет.

Я вам тприведу свежий пример с затонувшим теплоходом "Булгария". Если бы капитан корабля был именно профессионалом, а не рвачем, стремящимся любой ценой срубить бабло, то он бы просто не выпустил теплоход в плавание. Именно по той причине, что был профессионалом. А тот, у кого "исколючительно зарабатывает деньгит на жизнь профессией"Ю тому "море по колено". Профессионал имеет более широкое понятие, чем вы трактуете. Вы жн трактуете профессионалЮ как любого, кто просиживает свои штаны на рабочем месте.

Автор: azesmcar 24.7.2011, 10:01
Сыроежка

Вы плохо понимаете русский язык? Тут уже в третий или четвертый раз пишут, что вы путаете разницу между хорошим и хреновым специалистом с разницей между профессионалом и любителем. Причем тут желание срубить бабло? Профессиональный врач работает за деньги а не за удовольствие. Много вы знаете людей, которые ради удовольствия вырежут вам аппендикс? А вообще-то лично с ними не знаком, но таких людей обычно называют садистами, а человек, который сделает это за деньги - называется профессиональный врач. Если он вырежет вместо аппендикса почку, значит он хреновый специалист и его надо лишить лицензии врача.
Это не значит, что врач должен оставить пациента умирать, если ему не заплатят, сравнение с врачом некорректно по той простой причине, что врач имеет дело с жизнью человека, а это бесценно.

Я говорил о том, что спор профессионального программиста с человеком, для которого это хобби не имеет смысла, так-как профессиональный программист стремиться решить задачу, потратив на это минимум времени, без вреда для качества конечного продукта, а любитель стремиться получить удовольствие от процесса. Он может написать рекурсивный обход директории на ассемблере и потратит на это 2-3 дня, в то время как профессионалу такое "удовольствие" никто не разрешит. Если профессионал напишет обход директории за 2-3 дня, то его скорее всего уволят.
По этой простой причине спор профессионала с любителем не имеет смысла, они преследуют разные цели.
Теперь понятнее?

Автор: fish9370 24.7.2011, 11:19
Цитата(Сыроежка @  24.7.2011,  02:23 Найти цитируемый пост)
Зря вы поспешно согласились. Фактически, вас одурачили. Приведенный код никакого отношения к С++ не имеет. В том смысле, что тот же самый код твы могли бы назвать кодом С, а не С++


я согласился потому, что для того чтобы работать с полученными данными, мне нужно было бы написать контейнер.. а у него уже есть STL, Boost, Qt.. 

а так я с тобой согласен, разницы никакой..

Автор: baldina 24.7.2011, 19:18
 smile 
Цитата(Сыроежка @  24.7.2011,  09:50 Найти цитируемый пост)
Я вам тприведу свежий пример с затонувшим теплоходом "Булгария". Если бы капитан корабля был именно профессионалом, а не рвачем, стремящимся любой ценой срубить бабло, то он бы просто не выпустил теплоход в плавание.

капитан существо подневольное, и бабло не в его карман...
Сыроежка, Вам бы к знаниям чуть больше вежливости и чуть меньше апломба, цены бы не было. Был бы зеленый, еще понятно, но по всему человек уже взрослый, хз что теперь исправит..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)