При разработке, особенно при разработке для других разработчиков, наступает время, когда вы думаете: «Я действительно должен предвидеть эту ошибку». Этот быстрый совет покажет вам, как это сделать — чистый способ.
Шаг 1: Бросать
Часто вы пытаетесь предвидеть ошибку, но в итоге просто отследите что-то. Во время отладки было бы очень полезно сгенерировать исключение, чтобы ваш код прекратил выполнение, или дать дополнительную информацию о причинах возникновения ошибки. Для этого вам нужно выдать ошибку пользователю, то есть проигрыватель отладки Flash сможет ее перехватить, как и консоль при экспорте непосредственно из Flash Professional.
Допустим, я создаю класс User; это статический класс с параметрами, такими как name
и gender
.
Теперь предположим, что я хочу поймать, вводит ли пользователь что-то кроме M или F в его / ее поле:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package {
public class User1 {
private static var _name:String;
private static var _gender : String;
//SETTERS
public static function set name(name:String):void{
_name = name;
}
public static function set gender(gender:String):void{
gender = gender.toUpperCase();
if(gender != «F» && gender !=»M»){
throw new Error(«Gender must be F or M»);
}else{
_gender = gender;
}
}
public static function get name():String{
return _name;
}
public static function get gender():String{
return _gender;
}
}
}
|
Отправляя что-то вроде User1.gender = "multi"
, я бы User1.gender = "multi"
ошибку в моем отладчике, указав, что мой пол неверен.
Шаг 2. Попробуйте и поймайте ошибку
Захватив эту концепцию и развивая ее, я также могу создавать собственные классы ошибок.
Допустим, у меня есть класс UConnection, который обрабатывает действия подключения пользователя, такие как вход в систему. Эта функция входа в систему отправляет информацию в метод php, который возвращает идентификатор пользователя (в этом случае я назову его uid), и вам нужно ожидать, что идентификатор uid будет недействительным (то есть вход в систему не может быть выполнен).
Сначала вам нужно создать собственный класс ошибок, класс UIDError.
1
2
3
4
5
6
7
|
package{
public class UIDError extends Error{
public function UIDError():void{
super(«User ID returned invalid»);
}
}
}
|
Во-вторых, класс, который ожидает и обрабатывает исключение:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
package{
public class User{
private static var _uid:int;
//SETTER
public static function set uid(uid:int):void{
if(uid == 0){
throw new UIDError();
}else{
_uid = uid;
}
}
//GETTER
public static function get uid():int{
return _uid;
}
}
}
|
Наконец, реализация:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
//bear in mind this is pseudo code,
//it will not work as I don’t have a login.php
//and I’m not sending any variable through post,
//for a working version refer to the samples provided
public function login(un:String;pw:String):void{
urlloader:URLLoader = new URLLoader();
urlloader.addEventListener(Event.COMPLETE,onLogin)
urlloader.load(new URLRequest(«login.php»));
}
private function onLogin(e:Event){
try{
User.uid = e.target.data
}catch(e:UIDError){
trace(«login invalid»);
}
}
|
Код внутри блока catch
запускается, если он замечает какие-либо ошибки, возникающие внутри блока try
. В этом случае, если при попытке установить User.uid
, будет отслеживаться "login invalid"
. Если возникнет ошибка другого типа, Flash Player будет реагировать так, как обычно.
Вывод
Итак, у вас есть чистый, простой способ обработки ошибок в вашем коде для удовольствия отладки для вас и ваших коллег.
Надеюсь, вам понравился этот быстрый совет, спасибо за чтение!