Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.29;
Скачать: CL | DM;

Вниз

Units Again   Найти похожие ветки 

 
Steep ©   (2006-10-13 07:16) [0]

Хотел бы узнать оценку моего стиля кодирования
//======================================================
unit FileSizeS;

interface

uses
SysUtils;

function GetSizeTypeS(Path: String): String;
function GetSizeS(Path: String): integer;

implementation

//Получение типа размера файла в строке(1-б, 2-кб, 3-мб, 4-гб, 5-тб :)
function GetSizeTypeS(Path: String): String;
var
sr : TSearchRec;
FSize : real;
i : byte;
begin
FindFirst(Path, faAnyFile, sr); // Получение атрибутов
FSize := sr.Size;
i := 0;
 repeat
 i := i+1;
 Str( FSize:6:2, result);
 FSize := FSize/1024;
 until FSize<1;

 Case i of
   1: result := result + " байт.";
   2: result := result + " кбайт";
   3: result := result + " мбайт";
   4: result := result + " гбайт";
   5: result := result + " тбайт";
 end;
end;

//Получение размера файла в байтах
function GetSizeS(Path: String): integer;
var
sr : TSearchRec;
begin
FindFirst(Path, faAnyFile, sr); // Получение атрибутов
result := sr.Size;
end;

end.
//======================================================
Буду рад любой критике

PS. Спасибо за помощь с юнитом!
PPS.
Если удалять в проге ненужные Uses - уменьшит ли это размер проги? Или ненужные функции процедуры вообще не лезут в exe?


 
Думкин ©   (2006-10-13 08:03) [1]


> Case i of
>    1: result := result + " байт.";
>    2: result := result + " кбайт";
>    3: result := result + " мбайт";
>    4: result := result + " гбайт";
>    5: result := result + " тбайт";
>  end;


Я бы в массив оформил.

А если по пути - дырка от бублика?


 
Думкин ©   (2006-10-13 08:06) [2]

Деление на 1024 - shr 10 и не надо real.


 
Steep ©   (2006-10-13 08:13) [3]


> Я бы в массив оформил.

Да точно можно и в массив..

> Деление на 1024 - shr 10 и не надо real

Не знал..

Спасибо тебе Думкин!


 
Slym ©   (2006-10-13 08:29) [4]

стиля нету... где FindClose?


 
Westbronx   (2006-10-13 08:43) [5]

> i := i+1;
Я предпочитаю inc(i);, хотя это наверное дело вкуса?


 
Думкин ©   (2006-10-13 08:57) [6]

> Steep ©   (13.10.06 08:13) [3]

Только вначале - не надо реал, а потом уже сдвиг вправо.


 
Джо ©   (2006-10-13 08:59) [7]

> //Получение размера файла в байтах
> function GetSizeS(Path: String): integer;


function GetSizeS(Path: String): Int64;

Строковые параметры с const.

FindClose обязателен.

Проверять результат, возвращаемый FindFirst и соответствующим образом реагировать, если он не равен 0.

Остальное несмотрел — этого достаточно, чтобы код забраковать на такой стадии :)


 
Джо ©   (2006-10-13 09:01) [8]

> несмотрел

не смотрел, сорри.


 
ЮЮ ©   (2006-10-13 09:18) [9]

Кроме одного оператора case нет никакого форматирования. О каком стиле тогда говорить?


 
Пользователь   (2006-10-13 09:28) [10]

Steep ©   (13.10.06 07:16)  

Наверное, теперь отсутствие стиля - типа, тоже стиль?


 
Игорь Шевченко ©   (2006-10-13 10:39) [11]


> Хотел бы узнать оценку моего стиля кодирования


2


 
Kolan ©   (2006-10-13 10:59) [12]

Удалено модератором


 
Kolan ©   (2006-10-13 11:00) [13]

String на string забыл исправить и byte на Byte


 
Джо ©   (2006-10-13 11:03) [14]

> мой вариант:

Твой вариант тоже в топку. :)


 
Думкин ©   (2006-10-13 11:05) [15]

> Kolan ©   (13.10.06 10:59) [12]

Ты бы предыддущих ораторов почитал для начала.


 
Kolan ©   (2006-10-13 11:07) [16]


> Ты бы предыддущих ораторов почитал для начала.

Прочетал, и что? Я про форматирование говорю...


 
Fay ©   (2006-10-13 11:16) [17]

На самом деле, читая I := I + 1, прихожу к выводу, что I  - либо вещественного/вариантного типа, либо I есть свойство. Inc снимает подобные подозрения.


 
Kolan ©   (2006-10-13 11:23) [18]


{ Message dialog }

function GetAveCharSize(Canvas: TCanvas): TPoint;
var
 I: Integer;
 Buffer: array[0..51] of Char;
begin
 for I := 0 to 25 do Buffer[I] := Chr(I + Ord("A"));
 for I := 0 to 25 do Buffer[I + 26] := Chr(I + Ord("a"));
 GetTextExtentPoint(Canvas.Handle, Buffer, 52, TSize(Result));
 Result.X := Result.X div 52;
end;


Первое попавшееся из VCL


 
Fay ©   (2006-10-13 11:26) [19]

2 Kolan ©   (13.10.06 11:23) [18]
Welcome to the Platform Software Development Kit (SDK) documentation. This edition provides information about the application programming interfaces (API) supported by Microsoft Windows.

Первое попавшееся из PSDK


 
Kolan ©   (2006-10-13 11:28) [20]


> Первое попавшееся из PSDK

Я про I, обрати внимание.
 I: Integer;

PS
 Может ветку создать "Первыое попавшиеся :)"


 
Kolan ©   (2006-10-13 11:31) [21]


> Inc снимает подобные подозрения.
>

А не доглядел, сор...


 
Думкин ©   (2006-10-13 11:34) [22]

> Kolan ©   (13.10.06 11:07) [16]

А что такое стиль? Вот реал на дабл вы поменять захотели - это стиль?


 
Kolan ©   (2006-10-13 11:36) [23]


> Вот реал на дабл вы поменять захотели - это стиль?

Это я междуу делом, просто прям бросилось в лаза... Фсё остально тока на оформлению.

Стиль это совокупность приемов оформления и кодирования (ИМХО). Я показал одну сторону - оформление..

ЗЫ
По собжу. А это тут зачем?
//======================================================


 
Джо ©   (2006-10-13 11:37) [24]

2 Kolan.
Вот то, что результаты функций не проверяются и ресурсы не освобождаются — это стиль. А ты о string с маленькой буквы...


 
Kolan ©   (2006-10-13 11:44) [25]


> Вот то, что результаты функций не проверяются и ресурсы
> не освобождаются — это стиль.

По моему это не стиль. Типа "а, у него плохой стиль, он оесурсы не освобождает", так что-ли?

Не освобождение ресурсов это не плохой стиль/тон, это просто ОШИБКА(грубая)...
А стиль - это красота кода, понятность при условие что основная задача выполнена - код работает верно...


 
Fay ©   (2006-10-13 11:44) [26]

2 Джо ©   (13.10.06 11:37) [24]
> Вот то, что результаты функций не проверяются и ресурсы не освобождаются — это стиль
Это баги


 
SergP.   (2006-10-13 12:04) [27]

> [2] Думкин ©   (13.10.06 08:06)
> Деление на 1024 - shr 10 и не надо real.


Если все в целых - то да...
А вот если нужно чтобы было например "12,7 мбайт" ?


 
Джо ©   (2006-10-13 12:05) [28]

> [26] Fay ©   (13.10.06 11:44)
> 2 Джо ©   (13.10.06 11:37) [24]
> > Вот то, что результаты функций не проверяются и ресурсы
> не освобождаются — это стиль
> Это баги

"Стиль" в том смысле, в каком, например, говорят, что весь стиль жизни у человека такой, что он постоянно в неприятности влипает. Вот так и приведенный код — выдержан в одном отчетливом стиле, непременно приводящем к багам :)


 
Fay ©   (2006-10-13 12:12) [29]

2 Джо ©   (13.10.06 12:05) [28]
Приведённый код не приводит к багам - он из содержит.


 
Думкин ©   (2006-10-13 12:17) [30]

> SergP.   (13.10.06 12:04) [27]

Да, про дробные как-то упустил. Каюсь.


 
MsGuns ©   (2006-10-13 12:23) [31]

Если под "стилем" подразумевать оформление кода, то, как верно заметил ЮЮ в [9], стиля нет вообще. Читайте Тексейру и смотрите исходники самого Борланда, где стиль ЕСТЬ. И, ИМХО, вполне профессиональный.

Комментарии ничего не комментируют. А там, где они нужны (например, неясно, почему для получения информации о размере И атрибутах файла надо не только обращаться к двум РАЗНЫМ функциям, но и дважды заставлять винду выполнять одно и то же) отсутствуют.

Если понимать под "стилем" способ реализации алгоритмики, то стиль характеризуется одним словом - стиль  новичка.

Но уже сам факт, что новичка интересует его стиль, вселяет оптимизм ;)


 
Джо ©   (2006-10-13 12:28) [32]

> [29] Fay ©   (13.10.06 12:12)
> 2 Джо ©   (13.10.06 12:05) [28]
> Приведённый код не приводит к багам - он из содержит.

Я придерживаюсь такого определения, в котором "багом" считается ошибка, проявляющяяся при работе программы. С этой точки зрения, терминологически неверно говорить, что "баг содержится в коде программы", но верно: "при работе программы проявились баги". Чтобы мое понимание термина было более ясным, сошлюсь на синоним слова "баг" — "глюк". Нельзя сказать, что "в исходном коде — глюк", говорят: "глюк в работе программы". А вот эти баги и глюки происходят от ошибок в программе, они же, в свою очередь — от небрежного стиля программирования.
:)


 
Steep ©   (2006-10-13 12:30) [33]


> где FindClose?

А думал необязательно.. Сории Исправлюсь
----------------------------------------------

> inc(i);

Этого тоже не знал..
----------------------------------------------

> не надо реал, а потом уже сдвиг вправо.

Это как?
----------------------------------------------

> Int64;

>Строковые параметры с const.

Зачем??
----------------------------------------------

> Проверять результат, возвращаемый FindFirst

Если я никак не среагирую результат будет 0 (или ошибаюсь), это уж можно обработать в проге
----------------------------------------------

> Кроме одного оператора case нет никакого форматирования

Не выделяю я в первом бегине код (ненравиться так)
----------------------------------------------

> Наверное, теперь отсутствие стиля - типа, тоже стиль?

Угу! ;)
----------------------------------------------

> 2

мдя.. буду стараться
----------------------------------------------

> Стиль это совокупность приемов оформления и кодирования
> (ИМХО).

Я тоже так считаю
----------------------------------------------

> По собжу. А это тут зачем?
> //======================================================

Это отделения кода ;)
----------------------------------------------

> Это баги

Согласен
----------------------------------------------

> "12,7 мбайт"

У меня возвращает 12,78 кбайт (2 цифры после запятой)
----------------------------------------------

> Приведённый код не приводит к багам - он из содержит.

Обещаю исправить! ;)


 
Steep ©   (2006-10-13 12:32) [34]

Спасибо всем большое!


 
Джо ©   (2006-10-13 12:42) [35]

> Int64;

Потому, что размер файла нужно получать не из Sr.Size: Integer, а составлять из двух значений Sr.FindData.nFileSizeHigh и Sr.FindData.nFileSizeLow. Почему именно так — оставляю "на подумать" :)


> >Строковые параметры с const.

Этот параметр не изменяется в процедуре, указав const, ты
1. Сделаешь код более строгим
2. Позволишь оптимизатору сделать машинный код более оптимальным.


> > где FindClose?
>
> А думал необязательно..

Тут не думать нужно, а справку читать :)


> > Проверять результат, возвращаемый FindFirst
>
> Если я никак не среагирую результат будет 0 (или ошибаюсь)
> , это уж можно обработать в проге

1. Во-первых, зачем выполнять лишний код, если FindFirst НЕ вернул 0?
2. Во-вторых, значение Result будет НЕОПРЕДЕЛЕНО. И проверять его после выхода из функции совершенно бессмысленно — там будет что угодно.
3. Если FindFirst возвращает не 0, он возвращает код ошибки. Ее тут же можно и проанализировать.
4. И, главное: НУЖНО проверять результат функции. Это аксиома. Ее нужно выучить и следовать ей неукоснительно :)


 
nikola232 ©   (2006-10-13 14:05) [36]

Не наверное даже кол тебе влепим, Steep.
Ты два раза написал одно и тоже.
function GetSizeTypeS(Path: String): String;
var
sr : TSearchRec;
FSize : real;
i : byte;
begin
FindFirst(Path, faAnyFile, sr); // Получение атрибутов <-здесь
FSize := sr.Size; <-здесь
i := 0;
repeat
i := i+1;
Str( FSize:6:2, result);
FSize := FSize/1024;
until FSize<1;

Case i of
  1: result := result + " байт.";
  2: result := result + " кбайт";
  3: result := result + " мбайт";
  4: result := result + " гбайт";
  5: result := result + " тбайт";
end;
end;

//Получение размера файла в байтах
function GetSizeS(Path: String): integer;
var
sr : TSearchRec;
begin
FindFirst(Path, faAnyFile, sr); // Получение атрибутов<-здесь
result := sr.Size;<-здесь
end;


 
Думкин ©   (2006-10-13 14:10) [37]


>
> > не надо реал, а потом уже сдвиг вправо.
>
> Это как?

Я к целым числам свел - а как заметил SergP - этого мало. Тогда сдвиги откладываются.


 
nikola232 ©   (2006-10-13 14:22) [38]

Даже три раза ещё sr : TSearchRec;.
спрашивается зачем писал функцию function GetSizeS(Path: String): integer;


 
guav ©   (2006-10-13 19:50) [39]

>   3: result := result + " мбайт";

"файлы состоят из байт, в 1 байте 1024 милибайт" - почти (с) орешник

Моя версия перевода размера в строку:
function IntToSizeInUnits(I: Int64): string;
const
 Units: array[0..6] of string =
   ("Б","кБ","МБ","ГБ","ТБ","ПБ","ЭБ");
var J: Integer;
begin
 J := 0;
 while I >= (1 shl 10) do
 begin
   Inc(J);
   I := I shr 10;
 end;
 Result := IntToStr(I) + " " + Units[J];
end;


 
Ketmar ©   (2006-10-13 20:15) [40]

запинали. %-)

в общем -- учиться и учиться. более того: советую приучить себя не к "а мне нравится не как все", а к "борланд пишет так". ибо стиль борланда используют (афаик) в 90% контор, где пишут на Delphi. переучиваться будет тяжко, если что (по себе знаю...)


 
wl ©   (2006-10-13 21:25) [41]

> guav ©   (13.10.06 19:50) [39]
чувствуется стиль!
одно но - i, j...-переменные с большой буквы... и не лень к шифту тянуться :)


 
Ketmar ©   (2006-10-13 21:28) [42]

>[41] wl(c) 13-Oct-2006, 21:25
>одно но - i, j...-переменные с большой буквы... и не лень
>к шифту тянуться :)
более того -- лично меня несколько раздражает. привык начинать переменные с маленькой -- наследие Оберона. удобство в том, что визуально отличается от имени процедуры.


 
guav ©   (2006-10-14 00:16) [43]

> [41] wl ©   (13.10.06 21:25)


> [42] Ketmar ©   (13.10.06 21:28)

Shiftовать действительно лениво. Но следую стилю, похожему на исходный код VCL. Переучиваться совсем не тяжко.
Давно тот код писал, сейчас бы наверное FmtStr или Format использовал и вначале Assert(I >= 0) .


 
Eraser ©   (2006-10-14 02:22) [44]

> [32] Джо ©   (13.10.06 12:28)

> сошлюсь на синоним слова "баг" — "глюк

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

интересно бы услышать 100% правильное определение :)


 
Думкин ©   (2006-10-14 05:05) [45]


> Eraser ©   (14.10.06 02:22) [44]

Обратимся к истории. Баг - от первого насекомого, которого нашли в аппаратуре, когда она начала сбоить и как оказалось - по его вине.


 
Ketmar ©   (2006-10-14 06:15) [46]

2Eraser: "баг" -- это жук такой, как мне словарь рассказал. а "Глюк" -- это композитор.


 
ASoft   (2006-10-14 08:49) [47]

имхо, глюки и баги - это к аппаратной части. Ошибки - к программной


 
Anatoly Podgoretsky ©   (2006-10-14 14:04) [48]

В общем вывод в корзину?


 
Steep ©   (2006-10-14 18:40) [49]


> Но уже сам факт, что новичка интересует его стиль, вселяет
> оптимизм ;)

Рад стараться!
----------------------------------------------

> составлять из двух значений Sr.FindData.nFileSizeHigh и
> Sr.FindData.nFileSizeLow

Это типа как в винде? размер фала и занимаемое место на диске?

> запинали. %-)

Даже с одной стороны рад ;)

> советую приучить себя к  "борланд пишет так"

Стараюсь... раньше вобще лепил в одну строку ;)
А потом еще и на сайте нашел быстрые клавиши типа Ctrl+Shift+I (и офигел..;)

>  стиль борланда используют (афаик) в 90% контор

Я програмлю для себя... (хотя блин кто знает может будет новый Windows ;)

> nikola232 ©   (13.10.06 14:05) [36]

Спасибо за код ;)

> и не лень к шифту тянуться :)

Он тут всегда рядом!

> В общем вывод в корзину?

Вот так пишеш, пишешь,а тут бац...

> баг — глюк

Так при использовании мого кода глюков нет.. все ж работет ошибок не выдает...
Подумашь чуть больше оперки съест ;)
А вобще ИМХО
баг - вылетела ошибка и все дальше не работает
глюк - какой-то косяк, например неправильно считает, но прога продолжает свою работу


 
Anatoly Podgoretsky ©   (2006-10-14 18:50) [50]


> Вот так пишеш, пишешь,а тут бац...

Что поделаешь, жизнь она жестокая штука, можно и умереть.

Кстати разделяй понятия стиль и кривой код.


 
Джо ©   (2006-10-14 18:51) [51]

> [49] Steep ©   (14.10.06 18:40)
>
> > составлять из двух значений Sr.FindData.nFileSizeHigh
> и
> > Sr.FindData.nFileSizeLow
>
> Это типа как в винде? размер фала и занимаемое место на
> диске?

Нет, это совсем не типа :) Ладно, даю одну подсказку: какой размер может быть у файла?


> Так при использовании мого кода глюков нет.. все ж работет
> ошибок не выдает...
> Подумашь чуть больше оперки съест ;)

Это очень плохой подход. Срочным порядком нужно избавляться от такого "стиля". :)


> А вобще ИМХО
> баг - вылетела ошибка и все дальше не работает
> глюк - какой-то косяк, например неправильно считает, но
> прога продолжает свою работу

Не, это уже определенно не то :)


 
Anatoly Podgoretsky ©   (2006-10-14 19:00) [52]


> Нет, это совсем не типа :) Ладно, даю одну подсказку: какой
> размер может быть у файла?

Страшный, теоритически 10^20


 
Anatoly Podgoretsky ©   (2006-10-14 19:01) [53]

Джо ©   (14.10.06 18:51) [51]
Для серверов то, но и то надо в лог выводить информацию. Сервер не должен падать!!!

Это я на своей шкуре испытал за последние две недели.


 
Steep ©   (2006-10-14 19:13) [54]


> Кстати разделяй понятия стиль и кривой код.

А это разные понятия?
Стиль кода (как наиболее удачно сделать какую-то задачу) и стиль оформления кода
PS. насчет кривого кода - ну что ж поделаешь бывает "почуть-чуть" :)

> какой размер может быть у файла?

??? Ты прям меня грузиш на 100% :)

> Срочным порядком нужно избавляться от такого "стиля". :)

Уже на этом пути ;)

>  Сервер не должен падать!!!

Конечно не должен! (я испытываю на других фирмах :)


 
wl ©   (2006-10-14 21:21) [55]

??? Ты прям меня грузиш на 100% :)
другими словами - может ли размер файла превысить максимальное число типа Integer


 
Anatoly Podgoretsky ©   (2006-10-14 21:30) [56]


> может ли размер файла превысить максимальное число типа
> Integer

Без проблем, размер файла задается не Integer, а Int64



Страницы: 1 2 вся ветка

Текущий архив: 2006.10.29;
Скачать: CL | DM;

Наверх




Память: 0.63 MB
Время: 0.051 c
15-1160393864
лор
2006-10-09 15:37
2006.10.29
радиовещание


15-1159957324
Layner
2006-10-04 14:22
2006.10.29
Господа москвичи! Подскажите самый крупный IT универсам в столице


2-1160576247
Dr. Genius
2006-10-11 18:17
2006.10.29
Эмуляция Delphi IDE


9-1137827231
_Lucky_
2006-01-21 10:07
2006.10.29
Динамический список для объектов разного типа


6-1149253097
kreyl
2006-06-02 16:58
2006.10.29
Как запустить функцию на сервере и получить ее результат?