00:00.110 --> 00:00.950
خوش برگشتید.

00:00.950 --> 00:03.830
تو این ویدئو می‌خوایم نگاهی بیندازیم به کلمه کلیدی finally.

00:03.830 --> 00:06.260
بعدتر هم بیشتر در مورد استثناها صحبت می‌کنیم.

00:06.260 --> 00:08.060
پس نگران نباشید.

00:08.060 --> 00:10.970
تازه داشتیم نگاهی می‌انداختیم به کلمه کلیدی ساده exception.

00:10.970 --> 00:13.190
اما حالا بیایید نگاهی بیندازیم به کلمه کلیدی finally.

00:13.190 --> 00:19.550
کلمه کلیدی finally به شما این امکان رو می‌ده که در کنار try و catch، کدی رو اجرا کنید

00:19.550 --> 00:25.250
فرقی نمی‌کنه که کد داخل try کار کرده باشه یا نه.

00:25.250 --> 00:27.950
اگر کار کرده باشه، finally فراخوانی می‌شه.

00:27.950 --> 00:30.020
اگر کار نکرده باشه، finally فراخوانی می‌شه.

00:30.020 --> 00:36.530
پس به طور کلی، برای مواقعی عالیه که مثلا می‌خواید یک استریم دانلود رو ببندید،

00:36.530 --> 00:41.840
یا می‌خواید کد رو نهایی کنید، یا می‌خواید بعضی از اشیاء رو پاکسازی کنید.

00:41.840 --> 00:48.710
مثلا اگر دارید چیزی رو از وب دانلود می‌کنید، باید یک استریم دانلود باز کنید،

00:48.710 --> 00:53.480
دانلود رو انجام بدید و بعد باید اون استریم داده رو ببندید.

00:53.480 --> 00:55.370
نه استریم دانلود، بلکه استریم داده.

00:55.370 --> 00:57.830
بعد باید اون رو ببندید.

00:57.830 --> 01:01.100
در غیر این صورت ممکنه با انواع خطاها مواجه بشید.

01:01.100 --> 01:09.230
بلوک try مثلا سعی می‌کنه استریم رو باز کنه و بعد سعی می‌کنه چیزی رو دانلود کنه،

01:09.230 --> 01:12.560
اما فرض کنید وسط کار مشکلی پیش بیاد.

01:12.560 --> 01:16.370
در این صورت نمی‌خواید که استریم داده‌تون همچنان باز بمونه.

01:16.370 --> 01:21.020
می‌خواید مطمئن بشید که بعد از اجرای اون بخش کد، بسته می‌شه.

01:21.020 --> 01:23.300
اینجاست که بلوک finally به کار میاد.

01:23.300 --> 01:25.340
و این فقط یک مثال بود.

01:25.340 --> 01:29.270
اما بیاید نگاهی بیندازیم به کلمه کلیدی finally تو کدمون.

01:29.270 --> 01:32.180
می‌بینید که در کنار try و catch استفاده می‌شه.

01:32.180 --> 01:38.030
می‌شه گفت finally مثل else تو if و else if و else هست.

01:38.030 --> 01:42.530
ما این کلمه کلیدی finally رو داریم که در هر حال فراخوانی می‌شه.

01:42.530 --> 01:46.640
نه مثل else که فقط اگر هیچ چیز دیگه‌ای اتفاق نیفتاده باشه فراخوانی می‌شه.

01:46.640 --> 01:50.930
در اینجا بلوک finally در هر حال فراخوانی می‌شه.

01:50.930 --> 01:56.750
پس بیاید اینجا بنویسیم: این همیشه اجرا می‌شه.

01:56.840 --> 01:57.320
خوب.

01:57.320 --> 01:58.910
این کجا مفیده؟

01:58.910 --> 02:07.760
همونطور که گفتم، برای پاکسازی، نهایی کردن، یا به طور کلی پایان دادن به اتصال‌ها مفیده.

02:07.760 --> 02:13.460
ایده‌آل برای پاکسازی منابع مثل بستن استریم‌های فایل یا اتصال‌های دیتابیس.

02:13.460 --> 02:17.660
خوب، حالا بیاید کد رو اجرا کنیم و ببینیم چی می‌شه.

02:17.660 --> 02:20.030
می‌گیم لطفا یک عدد وارد کنید.

02:20.030 --> 02:21.170
بیاید یک عدد وارد کنیم.

02:21.170 --> 02:23.060
می‌گه: این همیشه اجرا می‌شه.

02:23.060 --> 02:24.470
خوب، دوباره اجرا می‌کنیم.

02:24.470 --> 02:27.320
این بار بیاید یک خطا ایجاد کنیم.

02:27.320 --> 02:29.120
می‌گه: خطا، تلاش برای تقسیم بر صفر.

02:29.120 --> 02:31.910
بعد می‌گه: این همیشه اجرا می‌شه و نتیجه صفره.

02:31.910 --> 02:34.010
حالا بیاید یک خطای دیگه ایجاد کنیم.

02:34.010 --> 02:37.790
این یکی رو با وارد کردن نوع اشتباه ایجاد می‌کنیم.

02:37.790 --> 02:38.510
خوب، خطا.

02:38.510 --> 02:42.830
رشته ورودی f در فرمت صحیح نبود و باز هم می‌گه: این همیشه اجرا می‌شه.

02:42.830 --> 02:47.780
می‌بینید که بلوک finally در هر حال اجرا می‌شه.

02:47.780 --> 02:54.560
این موضوع وقتی با دیتابیس‌ها یا استریم‌ها یا استریم‌های فایل کار می‌کنید خیلی مهمه،

02:54.560 --> 02:58.310
مثلا وقتی دارید داده دانلود می‌کنید یا حتی دارید چیزی رو از فلش می‌خوانید.

02:58.310 --> 03:05.450
حتی وقتی دارید داده‌ای رو از هارد دیسک می‌خوانید، ممکنه مشکلی پیش بیاد.

03:05.450 --> 03:06.020
مثلا هارد دیسک خراب بشه

03:06.020 --> 03:12.470
یا اتصال به فلش قطع بشه، یا خود فلش خراب بشه.

03:12.470 --> 03:14.090
در هر کدوم از این موارد،

03:14.090 --> 03:18.110
نمی‌خواید که برنامه‌تون کرش کنه.

03:18.110 --> 03:23.930
فرض کنید دارید با گوشی‌تون کار می‌کنید و دارید عکس می‌گیرید.

03:23.930 --> 03:27.680
حین عکس گرفتن، ناگهان کامپیوتر یا گوشی‌تون کاملا کرش می‌کنه.

03:27.680 --> 03:33.230
هیچ چیز کار نمی‌کنه چون به هر دلیلی نتونست عکس رو روی دستگاه ذخیره کنه.

03:33.230 --> 03:36.710
در چنین مواقعی می‌خواید که مکانیزم‌های ایمنی داشته باشید.

03:36.710 --> 03:41.540
و اینجاست که try، catch و finally خیلی مفیدند.

03:41.540 --> 03:44.060
خوب، حالا دیدیم که چطور کار می‌کنه.

03:44.060 --> 03:48.740
حالا بیاید نگاهی بیندازیم به ایجاد استثناهای خودمون.

03:48.740 --> 03:50.270
پس می‌بینمتون تو ویدئوی بعدی.

---
