реклама на сайте
подробности

 
 
19 страниц V  « < 8 9 10 11 12 > »   
Reply to this topicStart new topic
> Си
Сергей Борщ
сообщение Mar 20 2013, 10:09
Сообщение #136


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (ARV @ Mar 20 2013, 11:38) *
см. выше - попытка возвыситься над толпой за счет использования законно разрешенных "сверх"возможностей Си показывает наличие каких-то комплексов...
Вот это вы какую-то ерунду написали. Вполне нормальный, читабельный и рабочий код. Не надо обзываться, если он для вас непивычен. Также для многих непривычен тернарный оператор A ? B : C; но это не повод требовать его запрета. В некоторых случаях он просто незаменим, а во многих других исключительно удобен. Когда понимаешь. А когда не понимаешь - любой код кажется диким.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 20 2013, 10:48
Сообщение #137


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Если массив задан a[5], то 5[a] выходит за его границы. Удивляюсь, как оно работает (в смысле 4[a] и т.п.). И зачем? sm.gif
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Mar 20 2013, 11:24
Сообщение #138


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(igorle @ Mar 20 2013, 12:17) *
Код
...
    printf("\x1b[1D%c", "|/-\\|/-\\"[++idx & 0x3]);


Зачем повторения в массиве? А может тогда уж короче:
Код
    printf("\x1b[1D%c", "|/-\\"[++idx & 0x2]);



--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 20 2013, 11:28
Сообщение #139


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(mdmitry @ Mar 20 2013, 14:24) *
Зачем повторения в массиве? А может тогда уж короче:

Только оставить & 0x3, ограничиваться двумя младшими битами.
Go to the top of the page
 
+Quote Post
ARV
сообщение Mar 20 2013, 12:01
Сообщение #140


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



я прошу всех, высказывающихся против моей точки зрения, привести аргументы ПОЛЕЗНОСТИ всех этих "непривычных" способов записи и т.п. штук, которые ДОПУСТИМЫ синтаксисом языка. только прошу аргументы более существенные, нежели "рабочий код", "короткий вариант записи" и т.п. я готов принять вариант "по-другому невозможно".

по поводу резкости высказывания про "комплексы". я просто очень сильно подозреваю, что в момент разработки языка авторами владела эйфория "сдлать супер-пупер", и они ввели все эти нюансики, смысл которых на практике отсутствует, и, кроме повода некоторым показать свои знания, никакой иной пользы не приносит. поэтому я думаю, что надо потихоньку забывать то, что не является НЕОБХОДИМЫМ, ибо язык программирования - это не способ самовыражения, а инструмент для работы. а инструмент красив своей лаконичностью, а не рюшечками.

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


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
igorle
сообщение Mar 20 2013, 12:19
Сообщение #141


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(mdmitry @ Mar 20 2013, 15:24) *
Зачем повторения в массиве? А может тогда уж короче:
Код
    printf("\x1b[1D%c", "|/-\\"[++idx & 0x2]);

Да, это я сглупил. Дважды. Объявил восемь символов, а использовал только 4 (маска 0x3). Я хотел написать вот так:

printf("\x1b[1D%c", "|/-\\|/-\\"[++idx & 0x7]);

Но следовало так, как Вы говорите:

printf("\x1b[1D%c", "|/-\\"[++idx & 0x3]);

Цитата
Если массив задан a[5], то 5[a] выходит за его границы. Удивляюсь, как оно работает (в смысле 4[a] и т.п.). И зачем?

Массив не задан a[5]. Массив задан, например, a[10]. Здесь демонстрировалось, что a[5] и 5[a] дает одинаковый результат.

Вопрос "зачем" здесь не логичен. Правильнее спрашивать - "почему". Понятно, что Кениган и Ритчи не говорили "а давай мы здесь впиндюрим такую фичу". Нет, но они говорили - смотри как изящно можно реализовать оператор квадратные скобки". И то, что теперь на Си конечный (машинный) код получается гораздо лучше, чем большинство могут написать на Ассемблере - заслуга изящества Си
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 20 2013, 12:21
Сообщение #142


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (ARV @ Mar 20 2013, 14:01) *
аргументы ПОЛЕЗНОСТИ всех этих "непривычных" способов записи и т.п. штук, которые ДОПУСТИМЫ синтаксисом языка. только прошу аргументы более существенные, нежели "рабочий код", "короткий вариант записи" и т.п. я готов принять вариант "по-другому невозможно".
Просите аргументы полезности, но готовы принять лишь аргументы необходимости. "рабочий код" и "короткий вариант записи" вместе дают лаконичность записи, а значит упрощают сопровождение. Если вам это не нравится или ваш уровень владения С пока недостаточен - никто не заставляет вас использовать эти приемы. Но и махать шашкой на остальных тоже не нужно. Поверьте, все люди разные и кому-то это действительно удобно именно из-за лаконичности.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Mar 20 2013, 12:29
Сообщение #143


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(ViKo @ Mar 20 2013, 14:28) *
Только оставить & 0x3, ограничиваться двумя младшими битами.

Конечно! Немного невниматеьности с моей стороны, увы 01.gif


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
igorle
сообщение Mar 20 2013, 12:31
Сообщение #144


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Все мы консервативны и держимся за свои привычки. Интересно наблюдать за человеком, который первый раз видит двойной восклицательный знак:
Код
int a, b;
a = 27;
b = !!a;
Многие сначала офигевают, и спорят, что это невозможно понять. А через время смотришь - сами так писать начинают. Привыкли.

Кстати, я проверял скомпилированный код для трех случаев:
Код
b = !!a;
b = a ? 1 : 0;
if (a)
    b = 1;
else
    b = 0;
Во всех трех случаях gcc дает одинаковый результат.
Go to the top of the page
 
+Quote Post
ARV
сообщение Mar 20 2013, 12:53
Сообщение #145


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(igorle @ Mar 20 2013, 16:19) *
Понятно, что Кениган и Ритчи не говорили "а давай мы здесь впиндюрим такую фичу". Нет, но они говорили - смотри как изящно можно реализовать оператор квадратные скобки". И то, что теперь на Си конечный (машинный) код получается гораздо лучше, чем большинство могут написать на Ассемблере - заслуга изящества Си
в вашей трактовке слово "изящно" звучит неприкрыто по-гламурному: "смотри, какую изящную сумочку я вчера купила".

обилие НЕНУЖНЫХ вариаций одного и того же я лично не могу назвать изящностью. бОльшую часть своей жизни я писал на паскале, и при знакомстве с Си был неприятно поражен его синтаксисом. однако, со временем я признал плюсы Сишной лаконичности, и теперь паскаль кажется несколько громоздким - но не более! убрать громоздкость записи - это плюс, хотя за счет того, что едва ли не каждый символ имеет массу смыслов в зависимости от местоположения в строке. например, звездочка или амперсенд. по-моему, в этом случае с краткостью Керниган перебрал малёхо.


или способ чтения описания типа переменной. где логика?! если int i вопросов не вызывает (слева направо читаем и смысл понятен), то int (*ptr)(void) уже не так - слева направо не прокатывает, ибо начинать надо с середины и затем читать слева направо с перескоком через середину... почему?! возможно, когда-то это казалось красивым, но красота в логике, а порядок чтения записей на данном примере нелогичен.

мне кажется, все мы знаем русский язык в ПОЛНОМ его объеме, втом числе с матерными идиомами. однако, большинство из нас придерживается правила неиспользования этих слов в своей речи, во всяком случае здесь, на форуме, т.е. публично. никто же не призывает обучать детей русскому языку вместе с матами! я сторонник того, что рассказывать о 5[a] - это что-то из той же оперы: да, есть такая загогулина в Си, но приличные программисты ее не используют и уж тем более новичкам о ней не рассказывают. кому станет хуже от этого подхода? разумеется, можно описать указатель на функцию с тремя параметрами, каждый из которых является указателем на функцию с тремя параметрами, каждый из которых.... (и так далее) в виде одной строки (кстати, уважаемые сторонники изящества Си - сумеете ли вы с первой попытки это изобразить?), но ЗАЧЕМ?!?!?! это МОЖНО, но СОВЕРШНЕННО НЕ НУЖНО делать!!!

разве я не прав?

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



Цитата(Сергей Борщ @ Mar 20 2013, 16:21) *
Просите аргументы полезности, но готовы принять лишь аргументы необходимости. "рабочий код" и "короткий вариант записи" вместе дают лаконичность записи, а значит упрощают сопровождение. Если вам это не нравится или ваш уровень владения С пока недостаточен - никто не заставляет вас использовать эти приемы. Но и махать шашкой на остальных тоже не нужно. Поверьте, все люди разные и кому-то это действительно удобно именно из-за лаконичности.
хотелось бы найти такого челоека, кому запись типа 5[а] на самом деле помогает добиться какого-то положительного результата - о чем я и обращаюсь ко всем апоголетам "лаконичности". по-моему, знания затмили для вас истину sm.gif помните о бритве Оккама? не плоди сущности без необходимости!

Цитата(igorle @ Mar 20 2013, 16:31) *
Все мы консервативны и держимся за свои привычки. Интересно наблюдать за человеком, который первый раз видит двойной восклицательный знак:
Код
int a, b;
a = 27;
b = !!a;
Многие сначала офигевают, и спорят, что это невозможно понять. А через время смотришь - сами так писать начинают. Привыкли.

да, конечно, этот вариант самый короткий. но с моей точки зрения даже рабочая секунда Билла Гейтса не стоит того, чтобы экономить ее на более "спокойной" записи a = b ? 1 : 0;

кстати, вы УВЕРЕНЫ, что результат !0 будет ОБЯЗАТЕЛЬНО 1 ВСЕГДА ? в Си есть ряд вещей, на которые никогда нельзя положиться, например, размерность int или знаковость char... я дословно стандарт не помню - написано там про это?

я уже когда-то говорил, но повторю и теперь.
сравним a = !!b и a = b ? 1 : 0
первая запись многим непонятна - даже автор этого примера сам об этом сказал, это факт. далеко не в каждой книжке по программированию на Си найдешь объяснение этого примера.
вторая запись более проста, и в любой книжке есть подобный пример.
следовательно, первый способ более элитный, доступный более узкому кругу "профессионалов", а второй - всем подряд. и, чтобы подтвержить свой профессионализм, т.е. выделться из серой массы, профессионал использует первую запись. но из приличия мотивирует это лаконичностью или еще чем-то, практическая польза чего столь же туманна.
только этот способ позволяет порой профессионалу поучить новичка - сокровенными знаниями.
таким образом, я прихожу к выводу, что кроме "выпендрежа", нет никаких иных мотивов использовать не совсем привычные конструкции, которые тем не менее допустимы синтаксисом. дело не в Си, дело впсихологии sm.gif


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 20 2013, 13:07
Сообщение #146


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (ARV @ Mar 20 2013, 14:53) *
но ЗАЧЕМ?!?!?! это МОЖНО, но СОВЕРШНЕННО НЕ НУЖНО делать!!!

разве я не прав?
Не прав. Вы ведь используете в своей речи деепричастные обороты, хотя вполне можно строить предложения и без них и вообще обходиться словарным запасом людоедки Эллочки.
QUOTE (ARV @ Mar 20 2013, 14:53) *
хотелось бы найти такого челоека, кому запись типа 5[а] на самом деле помогает добиться какого-то положительного результата
Уже две страницы перед вами висит пример igorle, но вы отказываетесь его видеть. Вот вам еще один, аналогичный:
CODE
inline char to_hex(uint8_t tetrade) { return "0123456789ABCDEF"[tetrade & 0x0F]; }
Перепишите его в удобном для вас виде и докажите нам преимущества своего варианта.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
igorle
сообщение Mar 20 2013, 13:20
Сообщение #147


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(ARV @ Mar 20 2013, 16:53) *
да, конечно, этот вариант самый короткий. но с моей точки зрения даже рабочая секунда Билла Гейтса не стоит того, чтобы экономить ее на более "спокойной" записи a = b ? 1 : 0;


Все эти знания важны, чтобы во время программирования думать не о языке, а об алгоритме. Для этого надо говорить на языке свободно, а не со словарем. Тогда не будешь зависать над вопросами - чему равно (-3)%10

Чтобы лучше понять друг друга, попрошу Вас написать несколько строк кода.

Есть три переменны типа int - a,b,c;
В языке Си есть логические И и Или (&& ||), но нет логического XOR. Вам потребовалось сделать так, чтобы "с" была ксором от a и b.
Как вы это напишите в Вашем проекте?
Go to the top of the page
 
+Quote Post
ARV
сообщение Mar 20 2013, 13:21
Сообщение #148


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(Сергей Борщ @ Mar 20 2013, 17:07) *
Перепишите его в удобном для вас виде и докажите нам преимущества своего варианта.

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


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 20 2013, 13:26
Сообщение #149


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (ARV @ Mar 20 2013, 15:21) *
мой вариант будет просто понятен всем без исключения
Мой непосредственный начальник не знает языков программирования. Он специалист по радосвязи. Думаю ему будет непонятен. Вот ведь конфуз - какой бы ни был простой код, для его понимания все равно нужны какие-то знания.

QUOTE (ARV @ Mar 20 2013, 15:21) *
кроме того, что создал небольшое затруднения для восприятия некоторым не очень опытным программистам
Он уменьшил свое время на разбор этого куска кода в дальнейшем, в процессе сопровождения проекта. Эта конструкция охватывается взглядом целиком и моментально анализируется. А "некоторых не очень опытных" заставит при встрече с этим кодом пополнить свои знания и стать чуть более опытными.

QUOTE (ARV @ Mar 20 2013, 15:21) *
, а так же установил жесткую привязку длины строки к магическому числу, т.е. сделал код менее универсальным?
Простите, это вы о чем?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
ARV
сообщение Mar 20 2013, 13:26
Сообщение #150


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(igorle @ Mar 20 2013, 17:20) *
Вам потребовалось сделать так, чтобы "с" была ксором от a и b.
Как вы это напишите в Вашем проекте?
разумеется, напишу не так "лаконично", как вы. но в чем я проиграю при этом, и в чем выиграете вы? вряд ли стоит учитывать время, потребное на написание кода или износ клаватуры...

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

уверен, что после компиляции у нас обоих получится одно и то же в машинных кодах sm.gif




--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post

19 страниц V  « < 8 9 10 11 12 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 02:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01496 секунд с 7
ELECTRONIX ©2004-2016