Текущий архив: 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. переучиваться будет тяжко, если что (по себе знаю...)
Страницы: 1 2 вся ветка
Текущий архив: 2006.10.29;
Скачать: CL | DM;
Память: 0.58 MB
Время: 0.308 c