در این مطلب، ویدئو اصطلاحات برنامه نویسی: بسته شدن – نحوه استفاده از آنها و چرا مفید هستند با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:00,060 –> 00:00:01,829
سلام به همه، در این
2
00:00:01,829 –> 00:00:03,600
ویدیوی اصطلاحات برنامه نویسی چطور پیش می
3
00:00:03,600 –> 00:00:05,640
رود، ما در مورد بسته شدن اصطلاحات می پردازیم، ما می
4
00:00:05,640 –> 00:00:07,080
خواهیم به بسته شدن ها و هم
5
00:00:07,080 –> 00:00:09,570
پایتون و هم در جاوا اسکریپت نگاه کنیم تا بتوانیم
6
00:00:09,570 –> 00:00:11,280
این مفهوم را در دو زبان مختلف ببینیم
7
00:00:11,280 –> 00:00:13,230
و ممکن است به اصطلاح sink در
8
00:00:13,230 –> 00:00:15,120
اندکی توضیح داده شده است، بنابراین اگر
9
00:00:15,120 –> 00:00:16,859
با یکی از این زبان ها آشنایی ندارید نگران نباشید،
10
00:00:16,859 –> 00:00:19,260
آنچه مهم است این است که
11
00:00:19,260 –> 00:00:21,300
مفهوم بسته شدن را حذف کنید نه
12
00:00:21,300 –> 00:00:24,210
نحو خاص یک زبان، بنابراین
13
00:00:24,210 –> 00:00:25,920
اول از همه برای درک بهتر زبان های
14
00:00:25,920 –> 00:00:28,170
بسته ممکن است بخواهید ویدیوی من را
15
00:00:28,170 –> 00:00:30,140
در مورد توابع درجه یک تماشا کنید زیرا
16
00:00:30,140 –> 00:00:32,940
درک آنها به شما کمک می کند تا بهتر
17
00:00:32,940 –> 00:00:34,620
درک کنید که چرا بسته ها به روشی
18
00:00:34,620 –> 00:00:37,110
عمل می کنند که اساساً این کار را انجام می دهند تا به سرعت
19
00:00:37,110 –> 00:00:39,510
خلاصه کنیم که توابع کلاس اول ویدیو
20
00:00:39,510 –> 00:00:41,879
به ما این امکان را می دهند که با توابع
21
00:00:41,879 –> 00:00:45,270
مانند هر شی دیگری رفتار کنیم. به عنوان مثال، ما
22
00:00:45,270 –> 00:00:47,670
میتوانیم توابع را بهعنوان آرگومان به
23
00:00:47,670 –> 00:00:50,460
تابع دیگری ارسال کنیم، میتوانیم توابع را برگردانیم
24
00:00:50,460 –> 00:00:53,100
و میتوانیم توابع را به متغیرها اختصاص دهیم،
25
00:00:53,100 –> 00:00:55,079
بنابراین این مهم خواهد بود، زیرا
26
00:00:55,079 –> 00:00:57,239
در هنگام کار این موضوع را زیاد خواهیم دید. با
27
00:00:57,239 –> 00:00:59,940
بسته شدن مشکلی نیست، بنابراین
28
00:00:59,940 –> 00:01:02,250
اگر به تعریف ویکیپدیا نگاه کنیم
29
00:01:02,250 –> 00:01:05,519
، بسته شدن چیست، آنگاه بسته شدن را بهعنوان بسته شدن تعریف میکند
30
00:01:05,519 –> 00:01:09,060
، رکوردی است که یک
31
00:01:09,060 –> 00:01:11,250
تابع را همراه با یک محیط ذخیره میکند، یک
32
00:01:11,250 –> 00:01:14,100
نقشهبرداری که هر متغیر
33
00:01:14,100 –> 00:01:16,229
آزاد تابع را با مقدار یا
34
00:01:16,229 –> 00:01:18,240
مکان ذخیرهسازی مرتبط میکند. که نام آن
35
00:01:18,240 –> 00:01:20,520
هنگام ایجاد بسته بندی بسته شده بود،
36
00:01:20,520 –> 00:01:21,479
بسته شدن
37
00:01:21,479 –> 00:01:23,820
بر خلاف توابع ساده به تابع اجازه می دهد
38
00:01:23,820 –> 00:01:25,619
تا به آن متغیرهای ضبط شده
39
00:01:25,619 –> 00:01:27,689
از طریق ارجاع بسته
40
00:01:27,689 –> 00:01:29,729
به آنها دسترسی داشته باشد، حتی زمانی که
41
00:01:29,729 –> 00:01:32,159
تابع خارج از محدوده آنها فراخوانی می شود، بنابراین می دانم
42
00:01:32,159 –> 00:01:33,740
که ممکن است یک نوع تعریف دشوار باشد.
43
00:01:33,740 –> 00:01:36,090
درک کنید، اما بیایید
44
00:01:36,090 –> 00:01:38,970
نگاهی به چند نمونه کد بیندازیم تا واقعاً
45
00:01:38,970 –> 00:01:41,100
این موضوع را بفهمیم، بنابراین اولین مثال من
46
00:01:41,100 –> 00:01:44,100
در اینجا در پایتون است، اکنون اجازه دهید
47
00:01:44,100 –> 00:01:45,960
در کدها قدم بزنیم و دقیقاً به
48
00:01:45,960 –> 00:01:48,930
آنچه در اینجا میگذرد اشاره کنیم تا وقتی
49
00:01:48,930 –> 00:01:52,409
این تابع بیرونی را اجرا میکنم میتوانید اینجا را ببینید که این تابع را اجرا
50
00:01:52,409 –> 00:01:54,329
می کند و هیچ پارامتری را نمی گیرد
51
00:01:54,329 –> 00:01:56,579
، اولین کاری که انجام می
52
00:01:56,579 –> 00:01:58,560
دهد این است که وارد می شود و این پیام متغیر را اختصاص می دهد.
53
00:01:58,560 –> 00:02:01,409
با مقدار hi
54
00:02:01,409 –> 00:02:03,869
و سپس یک تابع داخلی در اینجا داریم،
55
00:02:03,869 –> 00:02:05,939
اکنون این تابع نیز هیچ
56
00:02:05,939 –> 00:02:08,280
پارامتری را نمی پذیرد و تنها کاری که انجام می دهد این است
57
00:02:08,280 –> 00:02:11,068
که متغیر پیام را چاپ می کند، زمانی که
58
00:02:11,068 –> 00:02:13,540
تابع داخلی ما به این متغیر پیام دسترسی پیدا می
59
00:02:13,540 –> 00:02:15,310
کند، این همان چیزی است که ما به آن
60
00:02:15,310 –> 00:02:17,439
رایگان می گوییم. متغیر چون در واقع
61
00:02:17,439 –> 00:02:20,140
در تابع داخلی تعریف نشده است اما ما
62
00:02:20,140 –> 00:02:21,939
هنوز در تابع داخلی به آن دسترسی داریم،
63
00:02:21,939 –> 00:02:24,129
بنابراین در اینجا در حال
64
00:02:24,129 –> 00:02:26,739
اجرای این تابع داخلی هستیم و سپس آن را
65
00:02:26,739 –> 00:02:29,650
به حالت عادی برمی گردانیم، بنابراین اگر
66
00:02:29,650 –> 00:02:31,599
این کد را اجرا کنم و می توانید ببینید که
67
00:02:31,599 –> 00:02:33,879
مقدار hi را چاپ می کند، بنابراین دوباره خیلی سریع
68
00:02:33,879 –> 00:02:36,069
کاری که انجام داد این است که ما این تابع خارجی را اجرا کردیم
69
00:02:36,069 –> 00:02:38,950
، در اینجا آمده است که این
70
00:02:38,950 –> 00:02:41,709
متغیر پیام را با این مقدار اختصاص می دهیم،
71
00:02:41,709 –> 00:02:43,540
سپس این تابع داخلی را از
72
00:02:43,540 –> 00:02:46,389
داخل تابع خارجی خود ایجاد کردیم که فقط
73
00:02:46,389 –> 00:02:48,040
آن متغیر پیام را چاپ می کند که ما آن را یک می نامیم.
74
00:02:48,040 –> 00:02:50,260
متغیر آزاد در داخل تابع داخلی و
75
00:02:50,260 –> 00:02:52,840
اکنون ما تابع داخلی را
76
00:02:52,840 –> 00:02:55,120
برمی گردانیم و آن تابع داخلی را نیز اجرا می کنیم،
77
00:02:55,120 –> 00:02:56,919
بنابراین باید آن پیام را چاپ کند
78
00:02:56,919 –> 00:02:58,930
که مشکلی ندارد، پس حالا بیایید
79
00:02:58,930 –> 00:03:01,750
به جای اجرای این
80
00:03:01,750 –> 00:03:03,459
تابع داخلی و برگرداندن آن، در اینجا یک کار متفاوت انجام
81
00:03:03,459 –> 00:03:06,099
دهید، اجازه دهید فقط تابع را بدون
82
00:03:06,099 –> 00:03:08,319
اجرای آن برگردانیم و میتوانیم با
83
00:03:08,319 –> 00:03:10,269
برداشتن پرانتز در اینجا و
84
00:03:10,269 –> 00:03:13,329
ذخیره آن این کار را انجام دهیم، بنابراین اگر این را اجرا کنم
85
00:03:13,329 –> 00:03:15,489
، به نظر میرسد هیچ اتفاقی نیفتاده است. اما
86
00:03:15,489 –> 00:03:17,409
کاری که من نیز میخواهم انجام دهم این است که
87
00:03:17,409 –> 00:03:21,069
این را به متغیری به نام myfunc اختصاص میدهم
88
00:03:21,069 –> 00:03:22,120
89
00:03:22,120 –> 00:03:23,919
و سپس اگر دوباره آن را اجرا کنم، میبینید
90
00:03:23,919 –> 00:03:25,690
که هنوز هیچ کاری انجام نمیدهد، پس
91
00:03:25,690 –> 00:03:27,010
بیایید وقتی اجرا میکنیم، این را خیلی سریع مرور
92
00:03:27,010 –> 00:03:30,159
کنیم. این تابع خارجی
93
00:03:30,159 –> 00:03:31,510
در اینجا وارد می شود و هر کاری را
94
00:03:31,510 –> 00:03:33,729
که قبلا انجام می داد انجام می دهد، اما به جای
95
00:03:33,729 –> 00:03:35,889
اجرای تابع داخلی، فقط تابع داخلی را
96
00:03:35,889 –> 00:03:39,190
برمی گرداند، بنابراین اکنون
97
00:03:39,190 –> 00:03:41,739
متغیر func من در اینجا در واقع یک
98
00:03:41,739 –> 00:03:44,949
تابع در حال حاضر است و برابر با
99
00:03:44,949 –> 00:03:47,769
تابع تابع داخلی است زیرا این همان چیزی بود که ما
100
00:03:47,769 –> 00:03:51,150
برگرداندیم و اگر myfunc را چاپ کنیم می توانیم این را ببینیم
101
00:03:51,150 –> 00:03:52,299
102
00:03:52,299 –> 00:03:55,419
و اگر آن را ذخیره کنم و اجرا کنم،
103
00:03:55,419 –> 00:03:57,639
می بینید که یک تابع است
104
00:03:57,639 –> 00:03:59,889
و برابر با این تابع داخلی است و من
105
00:03:59,889 –> 00:04:02,709
در واقع می توانم فقط آن را چاپ کنم نام
106
00:04:02,709 –> 00:04:04,870
آن و اگر آن را اجرا کنم، می بینید
107
00:04:04,870 –> 00:04:07,239
که نام تابعی که این
108
00:04:07,239 –> 00:04:09,729
متغیر به آن اختصاص داده شده، func داخلی است، بنابراین
109
00:04:09,729 –> 00:04:13,359
اکنون می توانم این متغیر را
110
00:04:13,359 –> 00:04:16,870
مانند هر تابع دیگری اجرا کنم، بنابراین اگر
111
00:04:16,870 –> 00:04:20,079
این را چند بار پشت سر هم اجرا کنم. اینجا و سپس
112
00:04:20,079 –> 00:04:22,539
ذخیره کنید و اجرا کنید که اکنون می توانید ببینید که
113
00:04:22,539 –> 00:04:25,210
پیام سلام ما را چاپ کرده است.
114
00:04:25,210 –> 00:04:26,529
115
00:04:26,529 –> 00:04:27,340
116
00:04:27,340 –> 00:04:29,560
117
00:04:29,560 –> 00:04:31,900
118
00:04:31,900 –> 00:04:34,210
119
00:04:34,210 –> 00:04:35,919
متغیری که در حال چاپ کردن است،
120
00:04:35,919 –> 00:04:38,710
بنابراین بسته شدن چیزی است، بنابراین به
121
00:04:38,710 –> 00:04:41,740
عبارت ساده، بسته شدن یک تابع درونی است
122
00:04:41,740 –> 00:04:44,490
که
123
00:04:44,490 –> 00:04:47,260
متغیرها را در محدوده محلی که در
124
00:04:47,260 –> 00:04:49,180
آن ایجاد شده است را به خاطر می آورد و به آنها دسترسی دارد، حتی پس از
125
00:04:49,180 –> 00:04:51,669
اتمام اجرای تابع خارجی، اکنون
126
00:04:51,669 –> 00:04:53,050
جالب تر می شود. وقتی
127
00:04:53,050 –> 00:04:55,300
پارامترهایی را برای توابع خود اضافه می کنیم، اکنون
128
00:04:55,300 –> 00:04:56,500
توابع ما در حال حاضر
129
00:04:56,500 –> 00:04:58,780
پارامتر ندارند، اما بیایید جلو برویم و یک
130
00:04:58,780 –> 00:05:00,940
زوج بسیار سریع اضافه کنیم، بنابراین در تابع بیرونی ما در
131
00:05:00,940 –> 00:05:03,729
اینجا در واقع
132
00:05:03,729 –> 00:05:07,479
یک پارامتر M را پاس می کنم. SG برای پیام و
133
00:05:07,479 –> 00:05:10,330
سپس من این متغیر پیام را
134
00:05:10,330 –> 00:05:13,300
برابر با مقداری که
135
00:05:13,300 –> 00:05:15,940
به تابع خارجی خود منتقل می
136
00:05:15,940 –> 00:05:18,280
کنیم تنظیم می کنم، بنابراین هر زمان که این متغیر را در اینجا تنظیم می کنم، اجازه دهید
137
00:05:18,280 –> 00:05:20,410
دو متغیر جدید ایجاد کنم،
138
00:05:20,410 –> 00:05:23,800
این تابع hi را صدا می زنم و من
139
00:05:23,800 –> 00:05:26,949
یکی دیگر را در اینجا فراخوانی میکنم، چیزی مانند
140
00:05:26,949 –> 00:05:28,990
تابع Hello و اکنون باید
141
00:05:28,990 –> 00:05:31,690
این پارامتر پیام را در اینجا
142
00:05:31,690 –> 00:05:33,700
پاس کنم، بنابراین میخواهم همان پارامتری را
143
00:05:33,700 –> 00:05:35,770
که قبلا داشتیم برای آن یکی که
144
00:05:35,770 –> 00:05:38,229
بالا است و برای این یکی من ارسال کنم. m میخواهد hello را انجام دهد،
145
00:05:38,229 –> 00:05:40,960
بنابراین هر دوی این
146
00:05:40,960 –> 00:05:43,570
متغیرها یک آرگومان رشته را دریافت میکنند و سپس
147
00:05:43,570 –> 00:05:45,700
متغیر پیام ما را روی آن رشته تنظیم میکند
148
00:05:45