Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.10.2009, 19:36
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 1  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
По умолчанию try, catch, finally. Зачем нужно finally?

Давно вопрос интересовал, но сейчас решил все таки спросить.
Хелп Адоуба:
Цитата:
Инструкция finally закрывает инструкции, которые будут выполняться независимо от того, обнаружена ошибка в блоке try или нет. Если ошибки нет, инструкции внутри блока finally выполняются после завершения выполнения инструкций блока try. Если ошибка есть, сначала выполняется соответствующая инструкция catch, затем — инструкции блока finally.
So, вообще не вижу смысла в finally.

Код:
try 
{ 
    // some code that could throw an error 
} 
catch (err:Error) 
{ 
    // code to react to the error 
} 
finally 
{ 
    trace("here");
}

Код:
try 
{ 
    // some code that could throw an error 
} 
catch (err:Error) 
{ 
    // code to react to the error 
}  
    trace("here");

Старый 27.10.2009, 19:39
DarkLight вне форума Посмотреть профиль Отправить личное сообщение для DarkLight Посетить домашнюю страницу DarkLight Найти все сообщения от DarkLight
  № 2  
Ответить с цитированием
DarkLight
ветеран форума
 
Аватар для DarkLight

Регистрация: May 2006
Адрес: Москва
Сообщений: 2,978
Отправить сообщение для DarkLight с помощью ICQ Отправить сообщение для DarkLight с помощью Skype™
Если в try-catch есть return, то finally выполнится перед return. Используется для освобождения ресурсов, таких как открытые файлы, сокеты, подкдючения к БД
__________________
4am is time to rock

Старый 27.10.2009, 19:50
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 3  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Понятно. Жаль, в хелпе не описывают.
Спасибо.

Старый 27.10.2009, 21:48
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 4  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
Цитата:
Если в try-catch есть return, то finally выполнится перед return
это лишь побочный эффект. все, что делает finally очень хорошо прописано в цитате из хелпа, приведенной в первом посте.
__________________
я могу стать всем, если только захочу

Старый 27.10.2009, 22:18
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 5  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Цитата:
Сообщение от Felicast Посмотреть сообщение
это лишь побочный эффект. все, что делает finally очень хорошо прописано в цитате из хелпа, приведенной в первом посте.
Тогда сравни два приведенных мной кода. Они совершенно одинаковы.

Старый 27.10.2009, 22:56
incoob вне форума Посмотреть профиль Отправить личное сообщение для incoob Найти все сообщения от incoob
  № 6  
Ответить с цитированием
incoob

Регистрация: Mar 2008
Сообщений: 215
finally нужен для тех случаев, когда происходит не глобальное отлавливание исключений, а только необходимых и когда нужно гарантированно выполнить какие-то действия перед выходом из блока кода
Код AS3:
			var obj:MyClass = new MyClass()
			var res:int
			try
			{
				obj.doSomething()
				res = 0
			}
			catch (e:FirstError)
			{
				res = 1
			}
			catch (e:SecondError)
			{
				res = 2
			}
			finally
			{
				obj.dispose()
			}

Старый 28.10.2009, 00:51
AL.exe вне форума Посмотреть профиль Отправить личное сообщение для AL.exe Посетить домашнюю страницу AL.exe Найти все сообщения от AL.exe
  № 7  
Ответить с цитированием
AL.exe
 
Аватар для AL.exe

Регистрация: Jan 2004
Адрес: Net
Сообщений: 1,049
Отправить сообщение для AL.exe с помощью ICQ
Самое смешное, что я тоже задавал этот вопрос на форуме какое-то время назад, потому что тоже решил, что он не нужен.

На практике нигде не использую, но, в теории, блок нужен для обработки всплывающих ошибок и для финта с return.
__________________
Дело не в тебе

Старый 28.10.2009, 11:25
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 8  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
Код AS3:
try 
{
	trace("try1");
	try 
	{
		trace("try2");
		throw new Error("error");
   	} 
	catch(e:Error) 
	{
     		trace("catch2");
		throw new Error("error");
   	} 
	finally 
	{
     		trace("finally2");
	}
} 
catch(e:Error) 
{
     	trace("catch1");
} 
finally 
{
     	trace("finally1");
}
попробуйте с finally и без
__________________
я могу стать всем, если только захочу

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:52.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 18:52.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.