Просмотр полной версии : Как правильно проверить наличие переменной ?
iillyyaa
21.08.2010, 00:13
начинал делать через простую проверку
if (что_то) { }
к примеру проверить есть ли спрайт, точнее элемент из массива..
if (box_x_y[xx][yy]) {
но столкнулся с некой проблемой, если создаётся массив, но некоторые элементы не создаются вовсе, то проверка глючит и ничего не работает :)
сделал всё через
try
вот что было, и что сделал..
if (box_x_y[xx][yy]) {
removeChild(box_x_y[xx][yy]);
delete box_x_y[xx][yy];
}
try {
//if (box_x_y[xx][yy]) {
removeChild(box_x_y[xx][yy]);
delete box_x_y[xx][yy];
}
catch (error:Error) {}
так работает всё, но мне кажется это не совсем верно..
а проверка делается, т.к. этот элемент мог быть или уже удалён или не создан вообще..
так вот как правильно проверить ? :umnik2:
Дело в том, что элемента box_x_y[xx] может не быть. Тогда при попытке доступа к его любому элементу (т.е. (box_x_y[xx])[yy]) возникает ошибка доступа. Т.е. надо проверять проверять наличие не только box_x_y[xx][yy] но и перед этим наличие box_x_y[xx]. Если у вас гарантированно box_x_y[xx] либо нет, либо массив и box_x_y[xx][yy] либо нет либо то, для чего можно безбоязненно вызвать removeChild, то проверка вот например.
if(box_x_y[xx] && box_x_y[xx][yy]) {
if (box_x_y[xx] && box_x_y[xx][yy])
UPD- не увидел выше..
а вообще срочно ищите в гугле as3 code convention
iillyyaa
21.08.2010, 03:04
спасибо, так работает.. :drinks:
не всё логично в языке.. (покрайней мере для меня :wacko:)
А вы попробуйте не использовать вложенные массивы :-)
OwnerOfSuccuby
21.08.2010, 14:57
Я слышал, что часто вроде масив когда создают - изначально забивают его какими то левыми значениями - чтобы потом было легче проверять - к примеру если в программе везде числа бльше 0 то ставят к примеру -1 , чтобы знать что ячейка пуста.
iillyyaa
21.08.2010, 15:23
OwnerOfSuccuby, массив может не содержать значений, а быть всего лишь именем квадрата или любого другого графического или ещё какого элемента..
MrPoma, забавно, а как нарисовать шахматную доску к примеру без вложенного массива ?
Psycho Tiger
21.08.2010, 15:23
undefined вполне справится с этой ситуацией, если массив ничем не забить =)
Добавлено через 1 минуту
iillyyaa, двумерный массив можно разложить в одномерный. Но Mr Poma минус от меня, я не вижу ничего плохого даже во вложенных векторах.
iillyyaa
21.08.2010, 15:27
Psycho Tiger, можно пример ? как разложить в одномерный ?
было поле 5х5, добавляем строку или столбец... как изменится массив ? или удаляем 3 столбец..
а массив то может быть не только двумерным, но и трёхмерным и т.д.
if (xx in box_x_y && yy in box_x_y[xx])
iillyyaa
21.08.2010, 15:42
etc, это чё такое ? :) и почему этот вариант лучше предыдущего ?
Тем, что он именно наличие индексов проверяет.
Psycho Tiger
21.08.2010, 16:11
Это справедливо только для прямоугольного двумерного массива.
Такой массив
1, 0, 1
0, 1, 0
0, 0, 0
Можно представить как
1, 0, 1, 0, 1, 0, 0, 0, 0
И зная "ширину" этого массива (у нас 3) можно обратиться к любой ячейке.
Например, 1 строка 2 столбец (индексация с 0):
ширина * 1 + 2
5 элемент массива в одномерном.
Добавлено через 1 минуту
При удалении, конечно, нужно взять бумажку и ручку, почертить и подумать, вывести формулы чтобы добавить новый столбец или убрать.
Я не говорю, что это удобно. Это просто ответ на вопрос "как".
iillyyaa
21.08.2010, 16:55
Psycho Tiger, тоесть, мне нужно вводить ещё 1-2-3 переменных, в которых хранить "ширину" ?
опять же, у меня может быть массив всего лишь вот такой..
x[1][1]=1; x[3][4]=2; x[8][7]=3;
а так мне придётся держать переменную ширины, потом формулами вычислять.. или вы лёгких путей не ищите ? :)
Добавлено через 2 минуты
etc, мне нужно проверить существует ли объект или данные или что то ещё с этой ячейке массива.. если существуют, провести с ними некие действия.. или даже не с ними а с чем то ещё..
Psycho Tiger
21.08.2010, 20:11
iillyyaa, решения в лоб не всегда самые лучшие.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.