You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
پیشنهاد میشه این قسمت رو بر روی IntellJ IDEA امتحان کنید
15
6
@@ -28,7 +19,7 @@ fun main(args: Array<String>) {
28
19
}
29
20
```
30
21
31
-
<divdir="rtl"markdown="1">
22
+
<divdir="rtl">
32
23
33
24
و خب گفتیم اگه متغیری بتونه مقدار null رو بگیره، باید قبل استفاده ازش چک بشه، و چک کردنش رو هم با "?" انجام میدادیم. خب حالا اگه بیاین قبل استفاده از nullMessage یک مقدار بهش بدین
34
25
@@ -42,7 +33,7 @@ fun main(args: Array<String>) {
42
33
}
43
34
```
44
35
45
-
<divdir="rtl"markdown="1">
36
+
<divdir="rtl">
46
37
47
38
کامپایلر یه اخطار کوچولو بهمون میده و میگه : "نیازی نیست متغیر غیر null رو چک کنیم".یعنی میتونیم "?" رو برداریم.
48
39
@@ -56,7 +47,7 @@ fun main(args: Array<String>) {
56
47
}
57
48
```
58
49
59
-
<divdir="rtl"markdown="1">
50
+
<divdir="rtl">
60
51
61
52
ولی خب تا اون رو برمیداریم اون متغیر یک بک گراند سبز میگیره به خودش و اگه بریم و موس رو روش نگه داریم متوجه میشیم که نوشته "Smart cast to kotlin.String". این به چه معنیه؟ بهتون نشون میدم.
62
53
@@ -86,7 +77,7 @@ fun main(args: Array<String>) {
86
77
}
87
78
```
88
79
89
-
<divdir="rtl"markdown="1">
80
+
<divdir="rtl">
90
81
91
82
خب تا اینجا کار خاصی نکردیم.دوتا کلاس ساختیم به نام های Employee و Contactor که از کلاس Person ارث بری میشن و همچنین داخل Employee یک متد ساختیم. خب حالا بعدش اومدیم و یک تابع داخل فایلمون ساختیم به نام hasVacations که توش یک شرط داره که البته بدنه شرط رو هنوز ننوشتیم، ولی خب میدونیم که اگر obj یک شی از نوع Employee بود داخل if میره. خب اگه بریم داخل if و بخوایم بنویسم obj.vacationDays متوجه میشیم که IntelliJ برامون ادامه اش رو مینویسه! توجه کنین که obj از نوع کلاس Person بود که تابعی به اون اسم نداره! اگه کد رو کامل بنویسیم متوجه میشیم که دوباره همون حالت پیش میاد، دوباره مینویسه "Smart casting to Employee" .
92
83
@@ -115,7 +106,7 @@ fun main(args: Array<String>) {
115
106
}
116
107
```
117
108
118
-
<divdir="rtl"markdown="1">
109
+
<divdir="rtl">
119
110
120
111
یعنی کامپایلر میاد میگه " من متوجه میشم که زمانی این کد اجرا میشه که obj یک Employee باشه و نیازی نیست که مثل جاوا اینجوری (Employee)obj.vacationDays(20) بنویسیمش
121
112
@@ -133,7 +124,7 @@ fun main(args: Array<String>) {
133
124
}
134
125
```
135
126
136
-
<divdir="rtl"markdown="1">
127
+
<divdir="rtl">
137
128
138
129
درواقع کامپایلر اینجا میگه "من میدونم این متغیر رو جوری تعریف کردی که میتونه null باشه، ولی خب قبل چک کردنش بهش مقدار دادی، پس من خودم به یک رشته(غیر قابل null شدن) تبدیلش میکنم که نیازی نداشته باشه که چک بشه!"
139
130
@@ -151,15 +142,13 @@ fun main(args: Array<String>) {
151
142
}
152
143
```
153
144
154
-
<divdir="rtl"markdown="1">
145
+
<divdir="rtl">
155
146
156
147
اینجا گفتیم که میدونیم input از جنس Any هستش، ولی اینجا میخوایم به String کستش کنیم و طولش رو برام بگیریم. تنها کاری که کردیم اون وسط این بود که از کلیدواژه as استفاده کردیم.
157
148
158
149
البته خب قبل اجرا هیچ مشکلی نداشتیم و هیچ اروری هم نبود. ولی خب وقتی کد رو اجرا میکنیم به ارور میخوریم
159
150
160
-
<pstyle="width: calc(100%+60px);">
161
151
<imgsrc="./result-1.PNG" />
162
-
</p>
163
152
164
153
و اونم به این دلیله که اگه یادتون باشه گفتیم هیچ گونه کستینگ به صورت لفظی در کاتلین نداریم و اگه بخوایم یک متغیر رو کست کنیم باید از توابعش استفاده کنیم.
165
154
@@ -177,7 +166,7 @@ fun main(args: Array<String>) {
177
166
}
178
167
```
179
168
180
-
<divdir="rtl"markdown="1">
169
+
<divdir="rtl">
181
170
182
171
به این معنی که من این دفعه "تلاش" میکنم که input رو به String تبدیل کنم.
0 commit comments