2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1 ... 3, 4, 5, 6, 7, 8, 9 ... 11  След.
 
 Re: Программирование для математиков: класс Polynomial
Сообщение18.11.2018, 13:55 


27/08/16
5107
Munin в сообщении #1354718 писал(а):
При этом не #pragma, потому что это не переносимо, а именно #ifndef.

Судя по таблице https://en.wikipedia.org/wiki/Pragma_once из распространённых компиляторов эту прагму не поддерживают только Cray. В общем IMHO: если фичу поддерживают GCC и MSVC, то забить на дальнейшую переносимость и не париться.


А почему в списке стилей написания if нет варианта
Код:
if (x)
    y++;


-- 18.11.2018, 14:00 --

photon в сообщении #1354334 писал(а):
Если для использования в вычислениях
... то Eigen совсем неплох. Это из фришных и портабельных библиотек.

С пользой от Матлаба согласен. Но для некоторых он слишком дорог. Или рискован.

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение18.11.2018, 14:07 
Заслуженный участник
Аватара пользователя


30/01/06
68751
realeugene в сообщении #1354895 писал(а):
В общем IMHO: если фичу поддерживают GCC и MSVC, то забить на дальнейшую переносимость и не париться.

Угу. Повидал я таких вояк в 90-е. Из них выжили только те, кто сообразили придерживаться другого принципа: если фича прописана в Стандарте, то можно (условно) забить на переносимость. А если нет - париться всё-таки стоит.

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение18.11.2018, 14:11 


27/08/16
5107
Dmitriy40 в сообщении #1354715 писал(а):
почти всегда пишу
Код:
if () <один_оператор>;
if () { <один_оператор>; };
На таких конструкциях ломается зрительное восприятие структуры управления программы. Особенно, если там не if, а цикл.

-- 18.11.2018, 14:15 --

Munin в сообщении #1354902 писал(а):
Угу.
Сами же можете оцените трудоёмкость и рискованность адаптации кода с #pragma once в случае, если нужно будет от этой прагмы отказаться. Эта прагма абсолютно безопасна. Зато очень удобна, иначе, ею бы не пользовались.

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение18.11.2018, 14:45 
Заслуженный участник
Аватара пользователя


30/01/06
68751
Согласен, что удобна. Что безопасна - не согласен.

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение18.11.2018, 14:47 


27/08/16
5107
Munin в сообщении #1354925 писал(а):
Согласен, что удобна. Что безопасна - не согласен.

Может быть опасна если один хэдер валяется в одном проекте по разным путям. Но за такое само по себе нужно руки отрубать.

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение18.11.2018, 14:55 
Заслуженный участник
Аватара пользователя


30/01/06
68751
Может быть опасна, если возникнет безумная идея всё куда-то перенести.

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение18.11.2018, 14:57 


27/08/16
5107
Munin в сообщении #1354934 писал(а):
Может быть опасна, если возникнет безумная идея всё куда-то перенести
Не вижу существенных рисков. Какие сценарии возникновения ошибок?

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение18.11.2018, 17:42 
Заслуженный участник


20/08/14
5591
Россия, Москва

(Оффтоп)

realeugene в сообщении #1354907 писал(а):
На таких конструкциях ломается зрительное восприятие структуры управления программы. Особенно, если там не if, а цикл.
Давайте проверим:
Код:
//1
for(i=0; i<N; i++) my[i] = 123;
//2
for(i=0; i<N; i++) { my[i] = 123; };
//3
for(i=0; i<N; i++)
    my[i] = 123;
//4
for(i=0; i<N; i++) {
    my[i] = 123;
};
//5
for(i=0; i<N; i++)
{
    my[i] = 123;
};
//6
for(i=0; i<N; i++)
{   my[i] = 123;
};
//7
for(i=0; i<N; i++)
{   my[i] = 123; };
Какие ещё варианты забыл?
Из этих мне больше нравится первый, несмотря на все его уже упомянутые недостатки.
Для более длинных списков операций пользуюсь или 4-м, или иногда 2-м (скажем инициализация двух-трёх массивов или короткий if или даже короткая функция). Иногда правда есть позывы использовать 6-й (код с отступами, но без лишней строки на открывающей скобке) - там лучше виден уровень вложенности открывающей скобки, но обычно всё равно возвращаюсь к 4-му.
Может конечно это наследие бейсика, когда if a=0 then b=c else b=d писалось в одну строку, но мне более компактный вид удобнее - меньше надо листать код и он лучше обозрим.

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение18.11.2018, 18:20 
Заслуженный участник
Аватара пользователя


30/01/06
68751
Dmitriy40 в сообщении #1354983 писал(а):
Какие ещё варианты забыл?

Код:
std::fill(my, my+N, 123);

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение18.11.2018, 18:26 
Заслуженный участник


20/08/14
5591
Россия, Москва
Munin
Варианты оформления, а не смысла. Ну и не уверен что Ваш код применим к языку С (а вопрос оформления - да).

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение18.11.2018, 18:45 


27/08/16
5107
Dmitriy40
вы зачем после закрывающей фигурной скобки блока точку с запятой ставите?

3, 4 или 5 в зависимости от выбранного в проекте стиля. Без лишней точки с запятой.

Код:
for(i=0; i<N; i++)
не хватает пробелов.
Или так:
Код:
for (int i = 0; i < N; i++)
или так
Код:
for( int i = 0; i < N; i++ )
или так
Код:
for (int i=0; i<N; i++)
или аналогично, в зависимости от выбранного стиля расстановки пробелов. Но не слитно всё в без пробелов.

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение18.11.2018, 19:19 
Заслуженный участник


20/08/14
5591
Россия, Москва
realeugene в сообщении #1354994 писал(а):
вы зачем после закрывающей фигурной скобки блока точку с запятой ставите?
Для единообразия: забываю где она необходима, а где нет (особенно когда языки разные а не один лишь С/С++, например в дельфи она необходима после каждого end за исключением end перед else в отличии от C/C++). Ставлю просто как признак конца записи оператора. Реально ставлю кстати далеко не всегда, это тут расставил ради большей схожести кода.
Пробелы тоже, реально пишу (горизонтально монитор широкий, код можно растягивать сильно, в отличии от вертикали)
Код:
for (int i = 0; i < N; i++) a[i] = b[N - 1 - i] * i + 123;//пример более сложного выражения
но ведь вопрос то не о пробелах или точке с запятой был, а о фигурных скобках.

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение18.11.2018, 19:22 


27/08/16
5107
Dmitriy40 в сообщении #1355011 писал(а):
а о фигурных скобках.

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

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

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение18.11.2018, 19:36 
Заслуженный участник


20/08/14
5591
Россия, Москва
realeugene в сообщении #1355014 писал(а):
Для того, чтобы код каждой функции помещался по вертикали, существует функциональная (объектная) декомпозиция программы.
Существует, я в курсе.
Расскажите это сложной несимметричной структуре вложенных if-ов на пяток уровней, ага. Или списку switch из пары сотен вариантов (банальная обработка управляющей команды или автомат состояний). :facepalm:
Впрочем дальше тут обсуждать нечего, это хоть и исключения, но всем известные, и лишь подтверждающие правила. С которыми я и не спорю в общем-то, высказывал личные предпочтения.

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение18.11.2018, 21:46 


27/08/16
5107
Dmitriy40 в сообщении #1355017 писал(а):
Расскажите это сложной несимметричной структуре вложенных if-ов на пяток уровней, ага. Или списку switch из пары сотен вариантов (банальная обработка управляющей команды или автомат состояний). :facepalm:
Это всё можно написать иначе.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 161 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7, 8, 9 ... 11  След.

Модераторы: Karan, PAV, Toucan, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group