Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 28.07.2013
Сообщений: 63
1

Рефакторинг в Си

10.02.2018, 17:45. Показов 2035. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, хотел спросить вот какой вопрос технология Рефакторинг применяется ли в языках Си и Assembler или нет?
И уместна ли она там вообще?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.02.2018, 17:45
Ответы с готовыми решениями:

Рефакторинг
Всем привет, в данном классе есть два поля static class Program { static Server...

Рефакторинг
Здравствуйте! Пишу диплом и решил сделать рефакторинг кода. Код получилось значительно уменьшить и...

Рефакторинг
Задали задание сделать рефакторинг данного кода, не могу понять код и что менять ...

Рефакторинг
собственно есть два(пока что) таких кусочка кода public class MainFormController { //... public...

8
3882 / 2482 / 418
Регистрация: 09.09.2017
Сообщений: 10,924
11.02.2018, 09:14 2
А что вы понимаете под рефакторингом? А то что-то мне подсказывает что мое определение отличается от вашего...
0
0 / 0 / 0
Регистрация: 28.07.2013
Сообщений: 63
11.02.2018, 15:53  [ТС] 3
Здравствуйте, как я понимаю Рефакторинг - это переработка кода но без потери его ясности и читабильности, рассчитано на избавление от сложных и ненужных конструкций и от избыточности и сложности, но как я понял это популярно только в ООП программировании потому что как то завязано на классах и паттернах, если я конечно не ошибаюсь.

Если я заблуждаюсь помогите мне пожалуйста, можно ли применять подобные технологии для чистого Си и Assembler'a
или там и так легко и чисто и подобное не нужно?
Я просто еще не опытный и мало понимаю в этом вопросе поэтому простите меня за глупые вопросы.
0
30 / 36 / 9
Регистрация: 16.10.2017
Сообщений: 137
11.02.2018, 16:00 4
Цитата Сообщение от Luchano Посмотреть сообщение
Если я заблуждаюсь помогите мне пожалуйста, можно ли применять подобные технологии для чистого Си и Assembler'a
Применять можно.
Цитата Сообщение от Luchano Посмотреть сообщение
или там и так легко и чисто и подобное не нужно?
На любом языке можно написать код, который можно потом улучшить.
0
0 / 0 / 0
Регистрация: 28.07.2013
Сообщений: 63
11.02.2018, 16:33  [ТС] 5
Большое вам спасибо! буду теперь знать.
0
3882 / 2482 / 418
Регистрация: 09.09.2017
Сообщений: 10,924
11.02.2018, 21:26 6
Luchano, В процессе жизни и доработок, программа усложняется и обрастает велосипедами и костылями. Зачастую точно так же выглядит прототип: пока еще точно не сформированы требования, приходится часто переделывать, а в такой ситуации строить хорошую архитектуру бесполезно.
Но вот когда требования и функционал более-менее установились, имеет смысл переработать код чтобы он стал красивым, понятным и расширяемым без ухудшения функционала (улучшение наверняка будет - побочным эффектом). Вот это и называется рефакторинг.
Проводить рефакторинг имеет смысл для любого языка.
0
Велосипедист...
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
11.02.2018, 23:09 7
Есть некая функция:
C
1
2
3
4
5
6
7
8
9
10
11
int plus( int a, int b )
{
    int result;
    
    if ( a == 0 ) return b;
    if ( b == 0 ) return a;
    
    result = a + b;
    
    return result;
}
Она, по сути, делает то же, что и написать a + b.

Проводим рефакторинг... Теперь эта функция выглядит так:
C
1
2
3
4
int plus( int a, int b )
{
    return a + b;
}
---- ----

Вообще, проведя рефакторинг, следовало бы исключить эту функцию из программы, просто заменив все plus( a, b ) на a + b. Но для примера, думаю, сгодится.
1
3882 / 2482 / 418
Регистрация: 09.09.2017
Сообщений: 10,924
12.02.2018, 10:42 8
Captain Maxee, а вдруг дальше эта функция вызывается по указателю? Ну там, выбор операции.
А можно провести рефакторинг и в другую сторону
C
1
2
3
4
5
6
7
8
int plus( int a, int b ){
  if( a > 0 ){
    if( b > INT_MAX-a ){err = ERR_INT_OVF; return INT_MAX;}
  }else{
    if( b < INT_MIN-a ){err = ERR_INT_OVF; return INT_MIN;}
  }
  return a+b;
}
То есть мы сохраняем базовый функционал, но защищаемся от ошибки переполнения.
1
0 / 0 / 0
Регистрация: 28.07.2013
Сообщений: 63
12.02.2018, 11:14  [ТС] 9
Большое спасибо за ваши примеры они просто блестящий выглядят! Сразу более проясняют ситуацию.
Особенно на сравнении как должно быть и что должно получится как у Captain Maxee, спасибо вам.
0
12.02.2018, 11:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.02.2018, 11:14
Помогаю со студенческими работами здесь

Рефакторинг
Добрый день. Необходимо поправить цикл foreach. При переходе к следующему элементу мы просматриваем...

рефакторинг -> переименование
Добрый день. Вопрос: в C# (IDE Visual Studio 2012) по нажатию F2 можно было мгновенно...

Рефакторинг кода
Нужно сделать рефакторинг большого корпоративного проекта (а лучше для нескольких сразу). Для...

Рефакторинг кода
Вообщем изучаю в C# методы и массивы (практикуюсь). Программировать, то есть писать программный код...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru