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

Вниз

Тест для всех!   Найти похожие ветки 

 
Loginov Dmitry ©   (2006-08-12 12:08) [0]

Обладателей голубых значков просьба смотреть на ответы теста со стороны.
Всем остальным просьба поучаствовать!

Тест очень простой.
Есть код:

 
 with TList.Create do
 try
   List[1] := nil;
 finally
   Free;
 end;

 ShowMessage("Hello World!");
 


Нужно определить, будет ли показан текст "Hello World!".

Delphi и литературу использовать нельзя!

Варианты ответов:
- Да
- Нет


 
Loginov Dmitry ©   (2006-08-12 12:10) [1]

> List[1] := nil;


Сорри,
 Items[1] := nil


 
cyborg ©   (2006-08-12 12:11) [2]

да


 
PZ   (2006-08-12 12:11) [3]

Да


 
VirEx ©   (2006-08-12 12:12) [4]

да!

ПС: я оптимист


 
SerJaNT ©   (2006-08-12 12:20) [5]

Нет, мне кажется List[1] не существует. Будет показано что-то вроде List index out of bouds ...


 
DprYg ©   (2006-08-12 12:26) [6]

Да, согласен что новый экземпляр не инициализирован. Поэтому Items[1] нет. Будет исключение, вызовется Free. А сообщения не будет, поскольку эта процедура будет прервана. А вот если бы ShowMessage до try, то было бы.


 
TUser ©   (2006-08-12 12:28) [7]

Нет. Count = 0, поэтому будет сгенерировано исключение, а finally не убивает его.


 
jack128 ©   (2006-08-12 13:02) [8]

Loginov Dmitry ©   (12.08.06 12:10) [1]
Items[1] := nil

ну.. это даже не интересно.

Вот так лудше:

with TList.Create do
try
  Add(nil);
  List[1] := nil;
finally
  Free;
end;

ShowMessage("Hello World!");


 
TUser ©   (2006-08-12 13:19) [9]

> jack128 ©   (12.08.06 13:02) [8]

Тоже нет.


 
Loginov Dmitry ©   (2006-08-12 13:19) [10]

Просьба отвечать только Да или Нет. Пожалуйста, никаких коментариев!


 
Gero ©   (2006-08-12 13:20) [11]

> [9] TUser ©   (12.08.06 13:19)

Почему нет? Теперь Items[1] будет существовать.


 
Gero ©   (2006-08-12 13:21) [12]

> [8] jack128 ©   (12.08.06 13:02)

В общем, думаю, да.


 
Gero ©   (2006-08-12 13:22) [13]

Ну а насчет сабжа — все расписано в [7].


 
jack128 ©   (2006-08-12 13:30) [14]

Gero ©   (12.08.06 13:20) [11]
Теперь Items[1] будет существовать

Да?


 
StriderMan ©   (2006-08-12 13:35) [15]


> Loginov Dmitry ©   [0]
нет


 
StriderMan ©   (2006-08-12 13:37) [16]


> jack128 ©   (12.08.06 13:02) [8]

тоже не будет сообщения


 
TUser ©   (2006-08-12 13:41) [17]

> Почему нет? Теперь Items[1] будет существовать.

Items[0] будет существовать. Какой там будет размер массива, я не помню - то ли 2, то ли 8. Но Count = 1, а дальше по логике должна быть проверка. Что-то типа

procedure TList.SetItem (Value: pointer; Index: integer);
begin
 if (Index < 0) or (Index >= FCount) then
   raise ...
 FItems[Index] := Value;
end;


 
StriderMan ©   (2006-08-12 13:48) [18]

Это тест для начинающих. давай чего-нить посерьезнее!

вот моя задачка (тоже для нач-их):

var
 o: TObject;
 i: integer;
begin
 o := Tobject.Create;
 i := integer(o);
 o := TObject(i);


вопрос: что будет в пер-ой о и вывалится ли ошибка?


 
Loginov Dmitry ©   (2006-08-12 13:49) [19]

TUser, Gero - спасибо вам большое за то, что знаете ответ на тест. Но зачем нужно было писать пояснения?


 
Loginov Dmitry ©   (2006-08-12 14:00) [20]

> StriderMan ©   (12.08.06 13:48) [18]
> Это тест для начинающих. давай чего-нить посерьезнее!
>
> вот моя задачка (тоже для нач-их):


Вот это как раз не серьезно.

Про try..finally я завел ветку, потому как подозреваю, что далеко не все умеют им правильно пользоваться. Помните, где-то пару месяцев назад была ветка про то, как избежать warning. Было что-то наподобие:

procedure TForm1.Button1Click(Sender: TObject);
var
 List: TStringList;
begin
 try
   List := TStringList.Create;
   List.Add("aaa");
 finally
   List.Free;
 end;
end;


Я ляпнул чушь, что нужно перед try поставить List := nil, и все будет ОК.
Некоторые меня поддержали, в том числе и из мастеров. Аргументированных доводов, что я был не прав, не было вообще.

Вывод - половина форума просто не знает, как пользоваться try..finally

Если кто-нибудь найдет ту ветку (она была в Основной или в Начинающих), дайте ссылку.


 
@BraIN ©   (2006-08-12 14:10) [21]

Т
> Я ляпнул чушь


Дошло :) Ветка лично у меня не сохранилась, хотя учавствовал. Доводы, кстати, были, ближе к концу.


 
@BraIN ©   (2006-08-12 14:11) [22]

учавствовал = участвовал


 
DiamondShark ©   (2006-08-12 14:51) [23]


> Я ляпнул чушь, что нужно перед try поставить List := nil

Но ведь код

constructor TMyClass.Create;
begin
 FList := TStringList.Create;
end;

destructor TMyClass.Destroy;
begin
 FList.Free;
 inherited;
end;

Вы чушью не считаете, верно?


> Вывод - половина форума просто не знает, как пользоваться
> try..finally

А другая половина не понимает, из каких соображений в TObject существует метод Free
;-)

Конечно, случай частный, и крайне антипедагогичный, но на чушь не тянет
;)))


 
jack128 ©   (2006-08-12 15:01) [24]

StriderMan ©   (12.08.06 13:37) [16]
тоже не будет сообщения

ну проверь ;-)

TUser ©   (12.08.06 13:41) [17]
а дальше по логике должна быть проверка. Что-то типа

procedure TList.SetItem (Value: pointer; Index: integer);


разницу между TList.Items[] и TList.List - понимаем? ;-)

А теперь финальный вопрос:

with TList.Create do
try
 Add(nil);
 Capasity := Count;
 List[1] := nil;
finally
 Free;
end;

ShowMessage("Hello World!");


 
SergP ©   (2006-08-12 15:02) [25]

> [0]


Нет.

> [8] jack128 ©   (12.08.06 13:02)


Тоже нет.


 
guav ©   (2006-08-12 15:05) [26]

> Capasity

не скомпилится :-p


 
DprYg ©   (2006-08-12 15:07) [27]

Capacity


 
SergP ©   (2006-08-12 15:11) [28]

> [18] StriderMan ©   (12.08.06 13:48)
> Это тест для начинающих. давай чего-нить посерьезнее!
>
> вот моя задачка (тоже для нач-их):
>
> var
> o: TObject;
> i: integer;
> begin
> o := Tobject.Create;
> i := integer(o);
> o := TObject(i);
>
> вопрос: что будет в пер-ой о и вывалится ли ошибка?


Не вижу причин чтобы ошибки вываливались...
ну а в o соответственно по идее должен быть указатель на созданный экземпляр TObject"а.

или там какие-то "хитрости" ?


 
SergP ©   (2006-08-12 15:14) [29]

> [24] jack128 ©   (12.08.06 15:01)


А что такое  Capasity ? Что-то не припоминаю...


 
guav ©   (2006-08-12 15:17) [30]

capacity - длина массива под список.
[24]  будет мессага Hello World!


 
jack128 ©   (2006-08-12 15:22) [31]

Емкость списка.
with TList.Create do
try
 Capacity := 10; // выделется память под 10 элементов
 //  Теперь ты можешь добавить в список 10 элементов не вызывая при этом перераспределения памяти
 for I := 0 to 9 do
   Add(nil);
 // * а вот сдесь TList вызовит ReallocMem чтобы иметь возможность добавлять новые элементы
 Add(nil);
finally
 Free;
end;


 
Gero ©   (2006-08-12 15:31) [32]

> [14] jack128 ©   (12.08.06 13:30)

Я виноват, я был невнимателен. Сорри.


 
TUser ©   (2006-08-12 16:25) [33]

> jack128 ©   (12.08.06 15:01) [24]

догнал :)


 
Loginov Dmitry ©   (2006-08-12 16:59) [34]

> DiamondShark ©   (12.08.06 14:51) [23]
>
> > Я ляпнул чушь, что нужно перед try поставить List := nil
>
> Но ведь код
>
> constructor TMyClass.Create;
> begin
> FList := TStringList.Create;
> end;
>
> destructor TMyClass.Destroy;
> begin
> FList.Free;
> inherited;
> end;
>
> Вы чушью не считаете, верно?


Не понял, к чему тут это? Единственное, что inherited в Create нет, а в остальном - приличный код.


 
Marser ©   (2006-08-12 19:21) [35]

Да.


 
StriderMan ©   (2006-08-12 20:28) [36]


> jack128 ©   (12.08.06 15:22) [31]

че-т не догнал.

Add(nil) выделит память под один элемент с индексом 0. Items[1]  будет ведь уже за границей массива


 
Юрий Зотов ©   (2006-08-12 20:29) [37]

Заголовок топика неверен. Этот тест - не для всех.


 
StriderMan ©   (2006-08-12 20:35) [38]

А все, понял разницу между .List и .Items


 
Loginov Dmitry ©   (2006-08-12 21:47) [39]

> @BraIN ©   (12.08.06 14:10) [21]

> Дошло :) Ветка лично у меня не сохранилась, хотя учавствовал.
> Доводы, кстати, были, ближе к концу.


Я "воссоздал" ту ветку:
http://matrix.kladovka.net.ru/temp.html

Внушительных доводов я не увидел тогда, я не вижу и сегодня.


 
Loginov Dmitry ©   (2006-08-12 21:49) [40]

> Юрий Зотов ©   (12.08.06 20:29) [37]

> Заголовок топика неверен. Этот тест - не для всех.


Точно. Надо было назвать: "Тест не для всех"



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

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

Наверх




Память: 0.56 MB
Время: 0.055 c
15-1155914647
тттт
2006-08-18 19:24
2006.09.10
Помогите настоить BIOS.


3-1152072641
elyseev
2006-07-05 08:10
2006.09.10
Переиндексация DBF


3-1151753384
Muchacho
2006-07-01 15:29
2006.09.10
Установка Fast Report 3.x в Delphi 2006 .NET


15-1155639110
Rouse_
2006-08-15 14:51
2006.09.10
Хех, народ хочет сделать Дельфи опенсорсным проектом :)


3-1152245904
Хой
2006-07-07 08:18
2006.09.10
Компонент xlReport