2014 dxdy logo

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

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




На страницу Пред.  1 ... 3, 4, 5, 6, 7, 8, 9 ... 12  След.
 
 Re: Программирование для математиков: класс Polynomial
Сообщение18.11.2018, 13:55 
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 
Аватара пользователя
realeugene в сообщении #1354895 писал(а):
В общем IMHO: если фичу поддерживают GCC и MSVC, то забить на дальнейшую переносимость и не париться.

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

 
 
 
 Re: Программирование для математиков: класс Polynomial
Сообщение18.11.2018, 14:11 
Dmitriy40 в сообщении #1354715 писал(а):
почти всегда пишу
Код:
if () <один_оператор>;
if () { <один_оператор>; };
На таких конструкциях ломается зрительное восприятие структуры управления программы. Особенно, если там не if, а цикл.

-- 18.11.2018, 14:15 --

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

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

 
 
 
 Re: Программирование для математиков: класс Polynomial
Сообщение18.11.2018, 14:47 
Munin в сообщении #1354925 писал(а):
Согласен, что удобна. Что безопасна - не согласен.

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

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

 
 
 
 Re: Программирование для математиков: класс Polynomial
Сообщение18.11.2018, 14:57 
Munin в сообщении #1354934 писал(а):
Может быть опасна, если возникнет безумная идея всё куда-то перенести
Не вижу существенных рисков. Какие сценарии возникновения ошибок?

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

(Оффтоп)

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 
Аватара пользователя
Dmitriy40 в сообщении #1354983 писал(а):
Какие ещё варианты забыл?

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

 
 
 
 Re: Программирование для математиков: класс Polynomial
Сообщение18.11.2018, 18:26 
Munin
Варианты оформления, а не смысла. Ну и не уверен что Ваш код применим к языку С (а вопрос оформления - да).

 
 
 
 Re: Программирование для математиков: класс Polynomial
Сообщение18.11.2018, 18:45 
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 
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 
Dmitriy40 в сообщении #1355011 писал(а):
а о фигурных скобках.

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

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

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

 
 
 
 Re: Программирование для математиков: класс Polynomial
Сообщение18.11.2018, 21:46 
Dmitriy40 в сообщении #1355017 писал(а):
Расскажите это сложной несимметричной структуре вложенных if-ов на пяток уровней, ага. Или списку switch из пары сотен вариантов (банальная обработка управляющей команды или автомат состояний). :facepalm:
Это всё можно написать иначе.

 
 
 [ Сообщений: 168 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7, 8, 9 ... 12  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group