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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Компактность и красота кода, Примеры 
:(
    Опции темы
bilbobagginz
Дата 6.2.2007, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 3
Всего: 317



Цитата(Vyacheslav @ 6.2.2007,  11:30)
Кокой вопрос здесь может идти о красоте кода, когда реальный код просто напросто подменяется его результатом, подсчитанным в "уме"?

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


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Vyacheslav
Дата 6.2.2007, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Цитата(bilbobagginz @  6.2.2007,  13:13 Найти цитируемый пост)
не совсем понимаю о чем вы.

О "красоте" конкретного примера smile
Код

DWORD ver = MAKEWORD(2,2);
WSAStartup(ver,&wsa);
 
В данном случае выясняем, что делает MAKEWORD(2,2) и делаем это вместо него в уме. Результат подставляем в код 
Код

WSAStartup(0x0202,&wsa);








--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
FelikZ
Дата 7.2.2007, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старый Маразматик
**


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

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



Я за:
Код

WSAStartup(MAKEWORD(2,2), &wsa);    //а здесь комментарий(если это важно)



--------------------
user posted image
PM WWW ICQ Skype   Вверх
bilbobagginz
Дата 7.2.2007, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 3
Всего: 317



Цитата

В данном случае выясняем, что делает MAKEWORD(2,2) и делаем это вместо него в уме. Результат подставляем

Вячеслав. извините конечно, как говорится "the beauty is in the eye of the beholder", т.е. красота - в глазах узрившего.
вы понимаете, что вы просто таким действием сказали Бьярну Страуструпу, что он полный страус ?

что-то из серии: "Бьярн, вот скажите, ну на фига было придумывать препроцессоры, макро в Си++?"

повторяю. когда вы работаете с 1 числом, которое нужно создать таким образом  его можно запомнить, и чтить. а если таких скомпонованных чисел десятки или сотни ?
для этого и придумали МАКРО.
мейкворд создаёт слово, это к версии не относится, поэтому создаём надстройку:
мейквершен. и тогда даже через 200 лет, если люди будут программировать, прочитая этот код, понятно, что данная строка:
version=MAKEVERSION(2,3)
как то создаёт число-версию.

пока.




--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
skyboy
Дата 7.2.2007, 02:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Цитата(bilbobagginz @  7.2.2007,  01:04 Найти цитируемый пост)
вы понимаете, что вы просто таким действием сказали Бьярну Страуструпу, что он полный страус ?

эээ... если я правильно уловил суть, вы оба - за то, чтоб не делать работу за препроцессор, создавая более запутанный и непонятный код smile только ты ещё этого не понял(что Вячеслав - соратник, а не противник)  smile 
Цитата(Fixin @  5.2.2007,  22:17 Найти цитируемый пост)
Получение максимально короткого, правильного и быстрого кода - все это оптимизация, которая, в конечном счете в любом случае необходима, т. к. конечного пользователя всегда интересует производительность. 

никто не спорит. но добиваться скорости путем проделывания работы за препроцессор, замену умножения сдвигом и т.д. - это просто какая-то мания. или фобия. особенно, когда при этом массив на 1500 элементов сортируется "пузырьком" smile
PM MAIL   Вверх
drZmeu
Дата 7.2.2007, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Sorry давайе не будем сорится  smile 
Я несупер кодер на C++ но стараюсь стать лучше...
Любые претензии в мой адрес выслушаю...
мне интересно если я делаю так:
DWORD ver=MAKEWORD(2,2);
WSAStartup(ver,&wsa);
то тут я ещё обьявляю переменную DWORD...]
А если я делаю так
WSAStartup(0x0202,&wsa);
То тут мне не приходится обьявлять эту переменную...
Код стаёт меньше... Но я незнаю что конкретно получится в .exe файле...
Если логически посудить то получится что размер должен уменьшится smile  прошу строго не ругать и поправить если что нетак =)
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
Vyacheslav
Дата 7.2.2007, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Цитата(bilbobagginz @  7.2.2007,  02:04 Найти цитируемый пост)
Вячеслав. извините конечно, как говорится "the beauty is in the eye of the beholder", т.е. красота - в глазах узрившего.
вы понимаете, что вы просто таким действием сказали Бьярну Страуструпу, что он полный страус ?

что-то из серии: "Бьярн, вот скажите, ну на фига было придумывать препроцессоры, макро в Си++?"

повторяю. когда вы работаете с 1 числом, которое нужно создать таким образом  его можно запомнить, и чтить. а если таких скомпонованных чисел десятки или сотни ?
для этого и придумали МАКРО.
мейкворд создаёт слово, это к версии не относится, поэтому создаём надстройку:
мейквершен. и тогда даже через 200 лет, если люди будут программировать, прочитая этот код, понятно, что данная строка:
version=MAKEVERSION(2,3)
как то создаёт число-версию.

пока.

Простите Вы топик от начала до конца прочитали? Что такое смайлики в курс?.  Что понимается под "красотой" можете сообразить? ( в кавычках ) А если в курсе нефиг читать мне нотации. 
Я тут весь топик пытаюсь доказать, что такая замена никак не тянет на красивый код. Причем подробно разъясняю свою точку зрения. А Вы мне страусом грозите. 

"пока"


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Vyacheslav
Дата 7.2.2007, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Что же я считаю действительно красивым кодом, то  Вы можете судить по данному фрагменту
http://forum.vingrad.ru/index.php?showtopi...t&p=1011551
Это решение мне понравилось, даже несмотря на то что я его автор smile Обычная же ситуация такова, что мне мой код перестает нравится почти сразу же как программа уходит в production. То есть тогда, когда править  можно только  код с выявленным дефектаами, а не просто непонравившиеся места.

Добавлено @ 14:28 
Цитата(bilbobagginz @  7.2.2007,  02:04 Найти цитируемый пост)
что-то из серии: "Бьярн, вот скажите, ну на фига было придумывать препроцессоры, макро в Си++ ?"

И кстати, только счас обратил внимание. А Вы сами  а Страступа читали? В смысле не последние, а первые редакции, где он  прямо говорит об нежелательности использовать макросы в С++ smile



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
SergeCpp
Дата 7.2.2007, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


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

Репутация: 15
Всего: 124



Vyacheslav, main возвращает int, вообще-то

Вот Ваш текст
Код
#include<iostream>
#include<iterator>
#include<set>
#include <algorithm>
#include <fstream>



//---------------------------------------------------------------------------
using namespace std;
#pragma argsused
int main(int argc, char* argv[])
{
     ifstream in( "ReadMe.txt" );
     multiset<string> mset;
     copy(istream_iterator<string,char>(in),  istream_iterator<string,char>(),  inserter(mset,mset.begin()));
     for(   multiset<string>::iterator i=mset.begin(); i != mset.end(); advance(i,mset.count(*i))){
        cout << *i << " " << mset.count(*i) << endl;
     }
}

А вот на такой текст мне смотреть приятнее
Код
#include <iostream>
#include <iterator>
#include <set>
#include <algorithm>
#include <fstream>

using namespace std;

int main( int, char* [] )
{
    ifstream in( "ReadMe.txt" );

    multiset< string > mset;

    copy( istream_iterator< string, char >( in ), istream_iterator< string, char >(), inserter( mset, mset.begin() ) );

    for( multiset< string >::iterator i( mset.begin() ); i != mset.end(); advance( i, mset.count( *i ) ) )
    {
        cout << *i << " " << mset.count( *i ) << endl;
    }

    return 0;
}

// EOF


P.S. Исправил multiset<string> на multiset< string > (см. вопрос ниже). Прошу извинить за невнимательность. В рабочем коде (при многочисленных просматриваниях) я бы это непременно заметил и поправил. Неудобно тут писать smile В VC6 удобнее smile А пишу я именно так. Мне так нравится.


Это сообщение отредактировал(а) SergeCpp - 8.2.2007, 09:29
PM MAIL WWW ICQ   Вверх
Vyacheslav
Дата 7.2.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Цитата(SergeCpp @  7.2.2007,  17:12 Найти цитируемый пост)
Vyacheslav, main возвращает int, вообще-то

Да. Это конечно очень серьезная ошибка, не спорю smile


Цитата(SergeCpp @  7.2.2007,  17:12 Найти цитируемый пост)
А вот на такой текст мне смотреть приятнее

В смысле скопировать и через строчку? Да без разницы. Раз нравится - пишите через строчку. Вопрос не в том, как располагать, а в том что поставленная задача потребовала  5 строчек кода.





--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
skyboy
Дата 7.2.2007, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



SergeCpp, скажи,  а почему в 
Цитата(SergeCpp @  7.2.2007,  16:12 Найти цитируемый пост)
multiset<string>

отступов нет, а в 
Цитата(SergeCpp @  7.2.2007,  16:12 Найти цитируемый пост)
istream_iterator< string, char >

каждый из двух типов обрамлен пробелами?
я не прикапываюсь, просто интересно smile
Цитата(Vyacheslav @  7.2.2007,  16:45 Найти цитируемый пост)
В смысле скопировать и через строчку? Да без разницы.

здесь ведь речь не об эффективности, а об эстетике, правда? а тут уже личные вкусы играют роль smile 
PM MAIL   Вверх
Любитель
Дата 7.2.2007, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(SergeCpp @  7.2.2007,  17:12 Найти цитируемый пост)
Vyacheslav, main возвращает int, вообще-то

В плюсах по стандарту main может ничего не возвращать (хотя в сигнатуре пишется int) - подразумевается 0.


Цитата(skyboy @  7.2.2007,  18:08 Найти цитируемый пост)
SergeCpp, скажи,  а почему в
Цитата(SergeCpp @  7.2.2007 @   16:12)

multiset<string>

отступов нет, а в 
Цитата(SergeCpp @  7.2.2007 @   16:12[/quote)

istream_iterator< string, char >

каждый из двух типов обрамлен пробелами?

Ну тогда почему здесь
Цитата(Vyacheslav @  5.2.2007,  15:07 Найти цитируемый пост)
Код
int a = 4* 4;

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

Цитата(drZmeu @  7.2.2007,  10:07 Найти цитируемый пост)
мне интересно если я делаю так:
DWORD ver=MAKEWORD(2,2);
WSAStartup(ver,&wsa);
то тут я ещё обьявляю переменную DWORD...]
А если я делаю так
WSAStartup(0x0202,&wsa);
То тут мне не приходится обьявлять эту переменную...
Код стаёт меньше... Но я незнаю что конкретно получится в .exe файле...
Если логически посудить то получится что размер должен уменьшится 

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



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


Эксперт
***


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

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



Цитата(bilbobagginz @  6.2.2007,  01:04 Найти цитируемый пост)
читабельность в 99% важнее, чем мнимая оптимальность кода на высоком языке - как Си/Си++, так как компилятор занимается оптимизацией кода. Ессно, что алгоритмически должна быть оптимальность, но не в таком направлении как здесь: и читабельный и нечитабельный код соберутся в идентичный бинарник, поэтому нет смысла код запутывать ( а потом через пару лет шаманить с бубном, пытаясь понять его )

+1
Цитата(Любитель @  7.2.2007,  19:04 Найти цитируемый пост)
В плюсах по стандарту main может ничего не возвращать

скорее "современные компиляторы добавят return 0, если такового не имеется" 




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Любитель
Дата 7.2.2007, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Можно сказать точнее - "явно ничего не возвращать".


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


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Цитата(skyboy @  7.2.2007,  18:08 Найти цитируемый пост)
здесь ведь речь не об эффективности, а об эстетике, правда? а тут уже личные вкусы играют роль   

Ну тогда извините. Под красотой я прежде всего понимаю возможность  максимальное использование возможностей языка, а не отступы, строчки - черезстрочки. Хотя для читабельности кода это играет далеко не второстепенную роль.
И для меня одним из фрагментов, написанных на С++, который стразу приходят на ум когда говорят о красивом коде, является  фрагмент из двух строчек, помещенных в предисловии Скотта Мейерса к книге Александреску "Современное проектировние на С++"
Код

template<bool> strcut CTAssert;
template<> struct CTAssert<true>;
  




--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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