Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.07.07;
Скачать: [xml.tar.bz2];

Вниз

---|Ветка была без названия|---   Найти похожие ветки 

 
Кен   (2003-06-17 04:21) [0]

А каких языковых конструкций в Дельфи вам нехватает ?
Вроде бы всего хватает. А из любой сложной ситуации можно вывернуться и использовать уже имеющиеся конструкции. Например.
Сколько раз вы писали такое :

var i : Integer;
...
for i:=0 to Memo1.Lines.Count-1 do begin
...
end;


или такое для массива 10 на 10

var
i, j : Integer;
...
for i := 1 to 10 do begin
for j := 1 to 10 do begin

end;
end;

А что будет если массив не двухмерный, а пятимерный ?

Почему была бы удобна языковая конструкции, которая бы позволяла просто перебрать все элементы подряд. Было бы удобно, понятно и код бы сократился.

Или может такая конструкция есть, а я просто не знаю ? Подскажите тогда.

------------
Дальше. Допустим вы пишете крестики-нолики, шахматы, шашки или нечто подобное. Сколько раз вы делаете проверки на выходы за пределы массива ? ... Думаю огромное колличество раз. Или пользуетесь финтами всякими чтобы эту проблему решить. Но почему сам Дельфи не понимает, что все попытки выхода за пределы массива надо не считать ошибками, а игнорировать ?

Можно конечно извернуться и писать код так, чтобы вообще не возникало проблемы выхода за пределы доски. Но это ненормальный подход. Нормальный подход - это описание общих правил для каждой фигуры. Общее правило для пешки : пешка может ходить на одну клетку вперёд. Всё.
Потому, что любому умственнополноценному человеку ясно, что если доска кончилась, то ходить дальше нельзя. Даже если очень хочется, то просто нету клетки, чтобы поставить фигуру. А вот Дельфи, если массив кончился, то непонятно что ходить дальше нельзя и он выдаёт ошибку. Поэтому программирование в Дельфи напоминает общение с душевнобольным, которому приходится растолковывать очевидные вещи.
Разве не так ?

Или может такие конструкции тоже есть, но я о них не знаю ? Тогда просвятите меня.

---------
Кто ещё чего об этом думает ?


 
АлексейК   (2003-06-17 05:10) [1]

> Но почему сам Дельфи не понимает, что все попытки выхода за пределы массива надо не считать ошибками, а игнорировать ?
Отключи контроль будет игнорировать, хотя ошибка от этого в приложении не исчезнет.
> Можно конечно извернуться и писать код так, чтобы вообще не возникало проблемы выхода за пределы доски. Но это ненормальный подход. Нормальный подход - это описание общих правил для каждой фигуры. Общее правило для пешки : пешка может ходить на одну клетку вперёд. Всё.
Интерсно как это вообще понять. Наверное мысли он твои должен угадывать и преобразовывать в машинный код.
> А вот Дельфи, если массив кончился, то непонятно что ходить дальше нельзя и он выдаёт ошибку.
А что ей остается делать если ты обращаешся к тому чего нет?
> Поэтому программирование в Дельфи напоминает общение с душевнобольным, которому приходится растолковывать очевидные вещи.
Разве не так ?

Полный бред.


 
Palladin   (2003-06-17 05:13) [2]

я думаю что ты бредишь...


 
[NIKEL]   (2003-06-17 05:37) [3]

ей богу...

ну неужели не понятно, что надо программировать!
а не бросил кнопку на форму и все...

создаешь класс(доска, пешки) и описываешь его, что должен делать этот объект, как ходить и тд

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

короче надо программировать а не задираться - Object Pascal и так достаточно выверенный язык...

короче флейм


 
Palladin   (2003-06-17 05:41) [4]

по поводу массивов мысль конечно немного отличается направленностью от остальной чуши, но дальше того "А как?" ты не пошел, даже подумать не соизволил, лишь предложил, что бы когда нибудь такое ввели в язык...
мне интересно, считаешь ли ты себя в таком случае вообще программистом?

две три недели назад на конференции "Общие вопросы", я писал функции работы с N мерными массивами, размерность которых задается в run-time, если хочешь можешь найти и посмотреть как это реализуется...
правда там не было функции для прогона массива в цикле, но ее не сложно организовать при помощи рекурсии...
это, к твоему сведению, называется алгоритмизация , тоесть программирование


 
vidiv   (2003-06-17 05:50) [5]

А мне такой конструкции не хватает

var s:string;
...
begin
... // заполняю s
case s of
"str1": ...;
"srt2": ...;
else
...
end;


Для строк case не работает... а жаль... приходится IFами выкручитваться... может есть директива компилятора какаянить?


 
Кен   (2003-06-17 06:07) [6]

> АлексейК (17.06.03 05:10)
> >А вот Дельфи, если массив кончился, то непонятно что ходить
> дальше нельзя и он выдаёт ошибку.
> А что ей остается делать если ты обращаешся к тому чего
> нет?

Игнорировать. Просто не выполнять ничего вызывающего такие ошибки.
Допустим вы описываете ход пешки. Вы не знаете где она стоит. Вы просто пишите что нибудь типа P[i,j]:="Пусто"; P[i,j+1]:="Пешка";
Старые её координаты i,j , новые i,j+1 . Всё вроде бы хорошо, но как сделать так, чтобы вас не доставала ошибка выхода за пределы доски ? Чтобы не описывать бесконечные проверки на выход за её пределы ?

> Отключи контроль будет игнорировать, хотя ошибка от этого
> в приложении не исчезнет.

А какой командой он отключается ?


> [NIKEL] © (17.06.03 05:37)
> ей богу...
>
> ну неужели не понятно, что надо программировать!
> а не бросил кнопку на форму и все...

А что по вашему означает "программировать" ? Это обязательно чисание гланд через ж**у ? Тогда пишите на чистом ассемблере.
На то и придуманы языки высокого уровня, чтобы этот процесс облегчить.

> один базовый класс - фигура, для него несколько виртуальных
> методов - типа Move(ходить), Check (проверка, куда ходить
> можно)

Да, только без описания чека для выхода за пределы массива можно ? Может Дельфи это само понять ? Можно этот Чек встроить в сам массив ? Навсегда ! Чтобы он исчез и не доставал меня никогда больше ?


 
Кен   (2003-06-17 06:21) [7]

> Palladin © (17.06.03 05:41)
> две три недели назад на конференции "Общие вопросы", я писал
> функции работы с N мерными массивами, размерность которых
> задается в run-time, если хочешь можешь найти и посмотреть
> как это реализуется...
> правда там не было функции для прогона массива в цикле,
> но ее не сложно организовать при помощи рекурсии...
> это, к твоему сведению, называется алгоритмизация , тоесть
> программирование

Попытался найти через поиск - ненашёл.

Но я то нехочу ничего реализовывать ! Мне надо написать простейшую программку. Простейшую, если бы не этот геморой. Причём геморой стандартный. У всех такой же геморой кто с массивами сталкивается. Если бы там в Дельфи можно было бы чего нибудь отключить или переключить, чтобы это не доставало, жизнь бы упростилась.


 
vidiv   (2003-06-17 06:38) [8]

А если массив представить в линейном виде и перебирать


 
Кен   (2003-06-17 06:49) [9]

Код должен писать тот, кому он нужен. Правильно ? Если меня заинтересует выхожу я за пределы массива или нет, то я напишу проверку. Но почему, я должен писать проверку, если меня это не интересует ?

> vidiv © (17.06.03 06:38)
> А если массив представить в линейном виде и перебирать

В смысле ? В одномерный массив перевести ?


 
vidiv   (2003-06-17 06:57) [10]


Кен © (17.06.03 06:49)
> В смысле ? В одномерный массив перевести ?

Да. сейчас как раз попробую!


 
Palladin   (2003-06-17 07:02) [11]

Диагноз: халявщик


 
Кен   (2003-06-17 07:03) [12]

> vidiv © (17.06.03 06:57)
>
> Кен © (17.06.03 06:49)
> > В смысле ? В одномерный массив перевести ?
>
> Да. сейчас как раз попробую!

Но это же тоже финт. Можно сделать проще. Массив не 10х10, а 30х30 и работать только с его серединой. Тогда выходы за пределы не будут вызывать ошибки. Но хочется без финтов просто. Чтобы всё само собой правильно работало.


 
Palladin   (2003-06-17 07:08) [13]


> vidiv ©

да, так и делается...
размерности массива устанавливаются и требуемые индексы передаются в параметрах функций как array of integer
у меня прикольно получилось, только вот практического применения не нашел :)


 
ZeroDivide   (2003-06-17 07:59) [14]

Не хватает Сишных конструкций


 
Johnny Smith   (2003-06-17 08:47) [15]

Хотелось бы иметь макросы.


 
Юрий Зотов   (2003-06-17 08:58) [16]

Препроцессор бы не помешал. Со всеми вытекающими...


 
blackweber   (2003-06-17 08:58) [17]


> Кен ©

Вроде человек с высшим образованием(если верить анкете, хотя я что-то сомневаюсь), а такую фигню лепишь.
Значит рано писать шахматы, раз с массивами не справиться.


 
KSergey   (2003-06-17 09:04) [18]

> ZeroDivide © (17.06.03 07:59)
> Не хватает Сишных конструкций

а) каких именно?
б) впрочем, это не надо делать. Я думал тут народ хочет правда пусть пофлеймить, но "по делу", типа помечтать. А тут какой-то выскочка хочет готовую ф-цию распознавания изображения, хочет, чтобы дельфи сама за него писала шахматные программы и т.д. Вот только один к нему вопрос: а колбасу кто есть будет? Тогда уж дельфи, согласись? Ты то тут при чем вообще получаешься? Совершенно не при делах.

Есть у меня и некоторое обоснование бредовости твоих мыслей, вернее хотелось поначалу растолковать почему это бред, но что-то дочитав до конца все желания - объяснять расхотелось. Сложилось впечатление, что не поймешь.

PS: А почему картошку надо садить, да еще полоть и окучивать? А какого хрена она сама-то на растет. При том заметь: ее еще и варить, блин, надо... Ваще хамство сплошное...


 
Юрий Зотов   (2003-06-17 09:16) [19]

> Кен

Извините, сразу видно, что на старых языках Вы не работали. Не горевать, а радоваться надо, что при выходе за границы массива возникает ошибка. Даже если, как Вы предлагаете, такие попытки игнорировать, программа все равно будет работать неверно, только вот причину Вы будете искать очень долго. А тут Вам на блюдечке преподносят и причину, и место ошибки.

Паскаль тем и хорош, что вопит по любому поводу. Если бы этого не было, ошибок в программах было бы на порядок больше, а искать их было бы на порядок сложнее. Такую фичу ценить, а не ругать нужно.

И в то же время тот же Паскаль дает Вам практически полную свободу, если Вы явно указываете компилятору, что действуете преднамеренно и обдуманно. Разве не здорово?


 
Кот Бегемот   (2003-06-17 09:17) [20]

>Кен © (17.06.03 07:03)
>Чтобы всё само собой правильно работало.

Этим все сказано :)


 
Darts   (2003-06-17 09:40) [21]

Не помешали бы и статические переменные.


 
vidiv   (2003-06-17 09:48) [22]

А как правильно лук сажать?


 
Palladin   (2003-06-17 09:53) [23]


> Darts (17.06.03 09:40)


implementation
var
StaticVariable:integer;


 
Digitman   (2003-06-17 09:56) [24]


> Darts



> Не помешали бы и статические переменные


они тебе и не мешают, живут себе и живут, давно уже, без твоего ведома)


 
KSergey   (2003-06-17 10:09) [25]

> Palladin © (17.06.03 09:53)
> implementation
> var
> StaticVariable:integer;

Это да, но рискну предположить, что Darts имел в виду статические переменные с областью видимости - функция (метод), а не модуль...


 
ZeroDivide   (2003-06-17 10:17) [26]

var
User: TLamo;
Program: TDBSupperPupperMegaSegaAllInOne;
begin
try
program := TProgram.Create(User);
program.AddCompatibleUserInterface;
program.AddAllFunctions;
program.Run;
except
ShowMessage("Сам дурак");
end;
end;


 
Darts   (2003-06-17 10:29) [27]

> KSergey © (17.06.03 10:09)
Да, это я имел в виду. Не хотелось бы забивать секцию реализации.


 
Mirovodin   (2003-06-17 10:40) [28]

Поддерживаю Johnny Smith © - нужны макросы. Их "зачаточная" реализация есть в FreePascal. Хотелось бы увидеть её, хотя бы в этом виде, и в Delphi. А уж потом "дотянуться" до C-шных. Но вроде как в Preview новых версий Delphi это не будет :((( А жаль.


 
Юрий Зотов   (2003-06-17 10:48) [29]

> статические переменные с областью видимости - функция (метод),
> а не модуль...

А как насчет вот этого:

function A: integer;
const
MyVar: Integer = 0;
begin
Inc(MyVar);
Result := MyVar
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Caption := IntToStr(A)
end;

Запускаем, несколько раз кликаем по кнопке и видим, что MyVar есть... статическая переменная с областью видимости - функция, а не модуль!


 
Digitman   (2003-06-17 11:05) [30]

Возможность использовать произвольные макросы и влекут за собой необходимость реализации того самого препроцессинга, о котором мечтают многие "паскалеры". Но это, думаю, сведет на нет преимущества Паскаля по строгости/недвусмысленности языковых конструкций, хотя, разумеется, возможности языка ощутимо расширит.
Борланд же пока сподобился реализовать лишь встроенные макросы а-ля IntToStr(), Str() и иже с ними, в основном - для форматного преобразования значений заранее неопределенного типа.
Чем, собственно, мы и пользуемся с успехом каждодневно, не задумываясь о "природе" этих операторов, и продолжаем эдак ностальгически хныкать о своих собственных макросах в приложениях)))


 
k-man   (2003-06-17 11:08) [31]

В анкете Кена действительно написано что у него высшее образование
но разве не ясно что это вранье.. Хотя бы по его идиотским постам.. Он весь форум "Игры" взбесил своим бредом, а теперь за "Потрепаться" взялся.
> Кот Бегемот © (17.06.03 09:17)

Точнее Не скажешь....


 
Darts   (2003-06-17 11:13) [32]

> Юрий Зотов © (17.06.03 10:48)

Спасибо, Юрий! Не знал, думал, что readonly. Хотя это зависит от директивы {$J}.
Еще раз спасибо.


 
KSergey   (2003-06-17 11:15) [33]

> Юрий Зотов © (17.06.03 10:48)

Да, Вы правы. Помнится где-то читал про константы как статические переменные. Правда недавно попробовал - что-то не заладилось, не помню (помнится напрямую присвоить значение не удалось). Ну да ерунда.

Но ведь это, согласитесь, "фича". Явного определения статической переменной нет, а константы решают проблему лишь частично...


 
Anatoly Podgoretsky   (2003-06-17 11:16) [34]

Проблема основная в плохом владении инструментом. И в частости объектной моделью.


 
uw   (2003-06-17 11:37) [35]

>KSergey © (17.06.03 11:15)

Флажок Assignable typed constants в опциях компилятора D6. Вообще-то этой фичи не было разве что у Вирта.


 
McSimm   (2003-06-17 11:42) [36]


> А каких языковых конструкций в Дельфи вам нехватает ?


Очень простой вещи мне немножко не хватает. Ссылки на сам объект(не в смысле ООП) действия блока with, а не только на его члены.

Что-нибудь вроде ключевого слова this для блока with.
Например:

вместо
this := SomeObj.SomeProperty[SomeIndex];
if Assigned(this) then this.SomeMethod(...

написать:
with SomeObj.SomeProperty[SomeIndex] do
if Assigned( this) then SomeMethod(....


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


 
Mystic   (2003-06-17 11:42) [37]

2 Кен

Наслаждайся

procedure TForm1.Button1Click(Sender: TObject);
var
J: Integer;
Dummy1: array[0..19] of Integer;
Dummy2: array of Integer;
begin
SetLength(Dummy2, 20);
{$R-}
J := 10;
Dummy1[J] := 11;
Dummy2[J] := 11;
{$R+}
end;


транслируется в

MOV EAX, 10
MOV [EBP+EAX*4-54h], 11
MOV EDX, [EBP-4]
MOV [EDX+EAX*4], 11


Один раз в C ошибку выхода за пределы массива ловил неделю (оказалась в чужом коде). Всего-то на один элемент!

Кстати, при напиании шашек (то же относится и к шахматам) проверка на выход за пределы массива пишется не один десяток раз вручную...

Почему была бы удобна языковая конструкции, которая бы позволяла просто перебрать все элементы подряд. Было бы удобно, понятно и код бы сократился.

Экономится десять минут труда, а необходимость возникает считаные разы.


 
uw   (2003-06-17 11:51) [38]

Что-то типа

for i: Integer = 1 to 17 do begin
end;


 
KSergey   (2003-06-17 12:25) [39]

> uw © (17.06.03 11:51)

А вот это еще вопрос.
Привыкаешь к этому в ++, но еще не известно - хорошо ли это на самом деле. В плане качества кода.


 
Ihor Osov'yak   (2003-06-17 12:28) [40]

2 McSimm © (17.06.03 11:42)
присоединяюсь

Еще возможности определять локальные переменные в любом месте кода (см. uw © (17.06.03 11:51) как частный случай). Но с предупреждением компилятора для случая, если это определение перекрывает (прячет) вышестоящую локальную переменную..

А вот с макросами в паскале - не согласен.. Тогда там такого намакросируют..

Также иногда не хватает статических полей классов, ну и см. Юрий Зотов © (17.06.03 10:48) - но не на уровне фичи, а так сказать, документировано.. Зы - статические поля класса можно обойти посредством финта, о котором говорил Юрий Зотов © (17.06.03 10:48), но хотелось бы это не как фичу, а как легальную возможностть..



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

Форум: "Потрепаться";
Текущий архив: 2003.07.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.008 c
1-20082
Voyager_XX
2003-06-23 19:55
2003.07.07
Чем вызвана ошибка Cannot assign a TFont to a TFont...


3-19956
Юнгман
2003-06-11 15:06
2003.07.07
Организовать таблицу результатов


1-20058
Brain Force
2003-06-25 17:52
2003.07.07
Народ, помогите с QuickRep-ом


11-20020
tamerlan311
2002-10-27 16:31
2003.07.07
рабочая область экрана


14-20225
KIE
2003-06-19 13:14
2003.07.07
Настройки сети





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский