Логин:     Забыли пароль?
 
Пароль:   Регистрация

Форум / Программирование - В помощь новичкам и любителям.  

В помощь новичкам и любителям.


Страницы: «1» «2» «3» «4» «5» «6» «7» «8» «9» «10»
bugmenot
bugmenot
3-ий класс
Сообщения: 88
[Сообщение #61] 21 июля 2011, 19:54

Цитата (Gooddy):

нужно банально упомянуть то, что объекты и модули после создания нужно переименовывать.

Книга о том как важно читать книги Ж-)

Общих принципов нет, а 30 строк было взято произвольно - путём тупого подражания рекомендациям Фаулера. На эфнете можно аффтара касталии потроллить на эту тему.

виконання програми розпочинається з того самого мiсця, де призупинилося.

Gooddy
Gooddy
3-ий класс
Сообщения: 84
[Сообщение #62] 21 июля 2011, 20:07

Цитата (bugmenot):

На эфнете можно аффтара касталии потроллить на эту тему.

Можно поподробнее?

Чисти код! Чисти код! Чисти код!
meligo
meligo
Посетитель
Сообщения: 1
[Сообщение #63] 17 сентября 2011, 20:27
"Пустые" скобки после вызова функции/процедуры/метода - нонсенс!

Ибо, такую возможность в Delphi ввели относительно недавно (как фичу!) и то - только для того лишь, чтобы легко "поедать" вытесняемый Си-шный код с минимальными накладными расходами (мол, раз уж так заведено в этих "кривых" (читай Си-шных) языках, пусть так, или почти так и переносится - с минимальными телодвижениями).

Но вставлять пустые скобки самому, намеренно... Извините, - это повод для немедленного увольнения! (в среде ортодоксальных Паскалистов!) :-D

Чтобы долго не доказывать справедливость первого утверждения - предлагаю посмотреть исходники в той же Delphi.

bugmenot
bugmenot
3-ий класс
Сообщения: 88
[Сообщение #64] 19 сентября 2011, 15:58

Цитата (Gooddy):

Можно поподробнее?

Ник Vibes, но без фанатизма, у него @. Но настоящий ФГМ не у него, а у лида Delphi Prism, который там же :-)

Цитата (meligo):

Пустые" скобки после вызова функции/процедуры/метода - нонсенс!

Цитата (meligo):

только для того лишь, чтобы легко "поедать" вытесняемый Си-шный код

Не согласен. Суть предложения в том, чтобы визуально можно было отличить символы подпрограмм от прочих. Идея в принципе неплохая, но неконсистентая, потому что:
ReadLn();  {syntax error}
и кодить в таком стиле не получится.

виконання програми розпочинається з того самого мiсця, де призупинилося.

Gooddy
Gooddy
3-ий класс
Сообщения: 84
[Сообщение #65] 20 сентября 2011, 14:19
Кстати, всегда интересовало, почему не разрешают писать ReadLn() и WriteLn()?

Чисти код! Чисти код! Чисти код!
min@y™
min@y™
Доктор наук
Сообщения: 400
[Сообщение #66] 20 сентября 2011, 14:26

Цитата (Gooddy):

Кстати, всегда интересовало, почему не разрешают писать ReadLn() и WriteLn()?

Вообще, думаю, что этот вопрос к авторам компилятора.
Это, как бы, не процедуры, а операторы внутри компилятора. В модуле System.pas ты их не найдёшь.

Цитата:


unit System; { Predefined constants, types, procedures, }
             { and functions (such as True, Integer, or }
             { Writeln) do not have actual declarations.}
             { Instead they are built into the compiler }
             { and are treated as if they were declared }
             { at the beginning of the System unit.     }

Вот такие дела.

Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
bugmenot
bugmenot
3-ий класс
Сообщения: 88
[Сообщение #67] 21 сентября 2011, 14:19

Цитата (Gooddy):

Кстати, всегда интересовало, почему не разрешают писать ReadLn() и WriteLn()?

Это супротив стандарта же

виконання програми розпочинається з того самого мiсця, де призупинилося.

Gooddy
Gooddy
3-ий класс
Сообщения: 84
[Сообщение #68] 29 марта 2012, 20:46
Китайский код

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

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

I. Циклы.

Думаю я немного утрирую, но предположим имеется такой китайский код:
begin
  if i=1 then
  begin
    doSomething;
  end
  else
    if i=2 then
    begin
      doSomething;
      doSomething;
    end
    else
      if i=3 then
      begin
        doSomething;
        doSomething;
        doSomething;
      end;
end;

Насколько же просто его привести в божеский вид:

for j:=1 to i do doSomething;

Код стал не только короче, но и понятнее (для знакомых с циклом for программистов).

Выводы:
1. Не стоит использовать многократные копии действий, например proc1(); proc1(); proc1(); Используйте цикл.
2. Изучайте конструкции языка и методы их применения до того как начинаете программировать. Это позволит использовать нужные конструкции в нужных местах. (хотя стоит заметить, что замена if-else-if на case (в примере) не особо хороший шаг)
3. Не используйте сложные структуры кода с большой вложенностью - это только запутает и вас и тех, кто будет читать код. Если использование таких структур необходимо - выделяйте в них смысловые блоки и разделяйте на отдельные процедуры.

II. Массивы.

Никогда не следует забывать, что вместо переменных вида x0, x1, x2, x3 нужно завести массив x и обращаться к каждому значению по x[i]. Это позволит обратиться к нужному значению даже если оно не известно заранее быстро и просто.

Вот пример:

int a0 = 0;
int a1 = 0;
int a2 = 0;
int a3 = 0;
int a4 = 0;
int a5 = 0;
int a6 = 0;
int a7 = 0;
int a8 = 0;
int a9 = 0;
 
z = superFunction();
x = getIndex(z);
 
if (x==0) a0 = 5;
if (x==1) a1 = 5;
if (x==2) a2 = 5;
if (x==3) a3 = 5;
if (x==4) a4 = 5;
if (x==5) a5 = 5;
if (x==6) a6 = 5;
if (x==7) a7 = 5;
if (x==8) a8 = 5;
if (x==9) a9 = 5;

(Хорошо бы и тут сделать if-else, но всё упрощается намного дальше)

Вот как изменить этот код, чтобы без потери функциональности получить тот же результат:

int a[10] = {0};
 
z = superFunction();
x = getIndex(z);
 
a[x] = 5;

Вывод
1. Массивы реально могут упростить программирование, когда необходимо большое количество однотипных переменных, предназначенных для одной цели.
2. Заполнять массивы следует при объявлении или в цикле for.
3. Благодаря массивам можно динамически обращаться к определённой "переменной" (ячейке массива) парой-тройкой символов.

III. Множественные условия (снова копипаст)

Возьмём для примера такой код:
if (a=1) or (a=2) or (a=3) or (a=4) or (a=5) then ...

Он занимает много места, не сразу можно понять в чём суть.

Заменим его на такой:
if (a>=1) and (a<=5) then ...

Или даже на такой (в других языках (не Дельфи) конструкции на проверку вхождения в множество и создания множества в виде диапазона значений могут отсутствовать (AS2), а могут быть несколько более продвинутыми (Python)):

if a in [1..5] then ...

Выводы
1. Код с использованием небольшого числа условий будет короче и понятнее.
2. Если же условие сложное по своей сути и упростить его нельзя - используйте возможности для создания абстракции.
Например
if (x1=x2) or (y1=y2) then ...

можно заменить на
if isLine(x1,y1,x2,y2) then ...
(хотя в данном случае условие довольно простое).

Чисти код! Чисти код! Чисти код!
min@y™
min@y™
Доктор наук
Сообщения: 400
[Сообщение #69] 29 марта 2012, 20:55
2 Gooddy:
Сам придумал? Мощно! Многого я тут не знал. Сохранил себе на твёрдый диск. Буду пользоваться! Спасибо!!!111 :)

Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
bugmenot
bugmenot
3-ий класс
Сообщения: 88
[Сообщение #70] 29 марта 2012, 22:34
Ты бы лучше вместо писания очевидных вещей заглянул в соседний тред, где перфекционисты требуются.

виконання програми розпочинається з того самого мiсця, де призупинилося.


Страницы: «1» «2» «3» «4» «5» «6» «7» «8» «9» «10» (всего страниц: 10, текущая: 7)
Всего сообщений: 96 (сейчас показаны: с 61 по 70)

Перейти в раздел:


 © 2004 - 2018, Delphi.int.ru
Версия форума: 1.10 (19.01.2010)
RSS Delphi.int.ru Expert Код
Выполнено за 0.05 сек.
Обратная связь  
Рейтинг@Mail.ru Majordomo.ru - надёжный хостинг