Andoid Course Documents
Andoid Course Documents
فلوچارت :نمایش فرآیند های الگوریتم ،بصورت معنا دار و قابل فهم
بیضی :شروع و پابان -متوازی اال ضالع :ورودی ها – مستطیل :دستورات -لوزی :دستورات
نکته :در زبان کاتلین تعریف نوع متغییر چندان اهمیتی نداره و خود زبان کانتلین نوع اش را تشخیص میدهد.
دو نوع متغییر در زبان کاتلین داریم که یکی ثابت است و مقدار آن تغییر نخواهد کرد که آن ( ) Valو دیگری که قابل تغییر می باشد
( ) Varمی باشد.
نکته :اگر بخواهیم نوع یک متغییر قابل تغییر را که منظور ( ) varزبان کاتلین بصورت اتوماتیک نوع آن را برای خود مشخص
می کند را مشخص کنیم بصورت زیر میتوان انجام داد :
نکته :در زبان کاتلین میتونیم نتیجه یک شرط را در یک متغییر بریزیم مانند خط زیر :
”else “Old
نکته :ما در زبان کاتلین برای استفاده از یک رنج یا یک بازه از ( ) INاستفاده میکنیم مثال کد باال => varable in 10 ..30
}
نکته Nullable :بودن متغییرها در زبان کاتلین به اینصورت است که ابتدا باید نوع متغییر معلوم شود و سپس جلوی نوع متغییر
معلوم شده عالمت سوال گذاشته شود مثل کد زیر
temp = null
نکته :وقتی یک متغییر را تعریف میکنیم و نوع آن را اعالم نمیکنیم و مقدار نمیدهیم ولی در جای دیگر یا خط دیگر آن را میخواهیم
مقدار دهی کنیم کاتلین منیتواند بفهمد این چه نوع متغییر است باید در هنگام اعالن متغییر بدون اینکه مقدار بدهمیم باید نوع آن را
انتخاب نماییم مثل کد زیر :
تابع )( printlnاینتر میزنه میره خط بعدی در کنسولی که داریم متن چاپ میکنیم. -
نکته مهم :به تمامی پارامترهای ورودی یک تابع ،امضای تابع گفته میشودو
نکته مهم :هنگام تعریف وردی های یک تابع در داخل پرانتز را آرگومان میگویند و هنگام استفاده از تابع مقدار دادن به پرامترها را
آرگومان میگویند پس به عبارتی جواب هر پارمتر یک آرگومان است ،نام ( ) nameیک پرامتر است ولی مقدار محمد که جلوی
پارامتر نام قرار میگیرد آن مقدار یعنی محمد یک آرگومان است.
نکته LinearLayout :در ایکس ام ال ( )XMLبرای چیدمان آیتم ها بصورت خطی میباشد که یا خطی بصورت عمودی است یا
افقی که با Attributeدرون خودش بنام ”android:orientation=”verticalعمودی و افقی آن مشخص می شود .
نکته مهم :نوشتن متن در اخل فایل ( )XMLاشتباه میباشد زیرا که باید متن ها را در فایل string.xmlتعریف کرد و در داخل فایل
”android:text=”@string/call variable name اصلی آن ها را صدا زد .نحوه ی صدا زدن در فایل اصلی >-
نکته :اگر میخواهیم از الیه های ( )XMLاستفاده کنیم بهتر است از ConstraintLayoutاستفاده کنیم که این پیشنهاد خود گوگل است
مزایای که داره مانند رسپانسیو بودن و باال بودن سرعت طراحی و بهتر بودن کارایی ()Performance
نکته مهم : ** GuideLine ** :برای ریسپانسیو کردن خیلی خوبه و بهتر ازش استفده کنید و هنگام بیلد اپلیکییشن دیده نمی شوند.
SINGLE EXPRESSION FUNCTIONS :
Void Function In Kotlin : ex : private fun calculateSalery ( ) : Unit { … } Means Void In Kotlin
Infix Function In Kotlin :: Infix Function Kind of Extension Function , Infix should have one argument
Other form for use infix function => myClassObject getMyFullName “ Solgi ” family argument
Anonymous Function -
Lambda Expression : ex 1 : format Lambda Expression : val variableName : type = { argument -> bodyCode }
Lambda Expression : ex 2 : other format Lambda Expression : val sum : (Int ,Int) -> Int = { a, b -> a + b} better than
Lambda Expression : ex 3 : other format Lambda Expression : val sum2 = { a : Int , b : Int -> a + b}
. استفاده میکنیمit اگر یک ورودی یعنی یک آرگومان داشتیم برای استفاده از آن در هر جای مثل الگ از کلمه کلیدی: نکته
Kotlin Lambda ::
: خواهیم گفتHigher Order شریط زیر را یک تابع داشته باشد ما به آن تابع3 اگر: نکته
– 1یک تابع دیگر را بعنوان ورودی دریافت بکنه
p1,
p2,
>p1 + p2 -
}
نکته :وراثت در شئ گرایی یکی از مزایای که ایجاد میکند reuseblityتابع ها یا ویژگی های یک کالس را فراهم میکند دیگر
نیاز نیست شما تابع هایی و ویژگی هایی که نوشتید را دوباره کپی کنید برای کالس دیگر و میتوانید با ارث بردن ویژگی ها و تابع ها
را داشته باشید و همچنین میتوانید بازتعریف یا بیشترتعریف بکنید.
حداقل سطح دسترسی را فراهم میکند – درحد خود کالس والغیر 4 – private :
سوال :چرا ما از Abstractionاستفاده میکنیم ؟ چرا متدها و فیلدها را پیاده سازی نمیکنیم و بعدش از طریق ارث
بری آن فیلد و متد را باز تعریف کنید چرا میایم انتزاع را انتخاب میکنیم که نباید پیاده سازی اتفاق بیوفتد ؟
جواب :زمانی که ما یک کالس را Abstractمیکنیم در واقع داریم یکسری قوانین را لحاظ میکنیم که تمام زیر کالس ها
و کالس های فرزند باید از این قانون تبعیت کنند ،یعنی اینکه باید پیاده سازی را خودشان انجام دهند.
نکته :تمامی تابع های بدنه دار ( حتما باید بدنه داشته باشد ) و معمولیه داخل Interfaceاز نوع public openمیباشد و از نوع
معمولی بیرون interfaceکه از نوع public finalبودند نیست.
نکته :استفاده کردن از interfaceها در ارث بری نیاز به گذاشتن پرانتز نیست وفقط کالس ها هستند که هنگام ارث بری از پرانتز
استفده میکنند.
نکته :از interfaceها نمیتوان نمونه ساخت مانند کالس های انتزاعی غیر قابل نمونه گیری هستند.
نکته :یک کالس فقط میتواند از یک کالس ارث بری کند و امکان ارث بری از دو کالس وجود ندارد باید بجای کالس دوم یک
Interfaceساخت و اینطوری مشکل ما حل میشود .
نکته :دلیل استفاده از Interfaceها این است که ما میتوانیم از چندین interfaceارث بری کنیم بصورت هم زمان و همچنین
میتوانیم از Interfaceها بصورت Callbackاستفاده بکنیم این 2دلیل خوب برای استفاده از Interfaceهاست.
{)
{ Init
) downloadFromUrl ( link
}
{ ) for ( i in 1..10
}
downloadListener.onDownloadComplete ( link )
Downloader (
object : DownloadListner {
})
بیش از یکبار وجود دارد پس در اینجا یک رفتارis – a اگر چندین کالس که از یک کالس ارث برده شده اند یعنی رابطه: نکته
. دارد استفادده میشودPolymorphism چند شکلی اتفاق افتاده پس در اینجا
Overload In Kotlin ::
میگوییمoverload براساس تشخیص زبان کاتلین از تابع زیر استفاده کند که به اینsayMyName هنگام استفاده از تابع: نکته
return name
}
Companion Object In Kotlin == Static In Class In Dat companion object { define all filed in this area }
Destructuring In Kotlin ::
Ex : val ( id , name , country ) = DataClassPerson (id : “11” , name : “ Mohammad “ , country : “ Iran “ )
ها است منظور مقدارهای ثابتی که تغییر نمیکنندconstant نماینده ی گروهی از: enum class : نکته
نمیconst val میتواند خروجی یک تابع را بگیرد ولی درval این است کهconst val باval فرق بین متغییر از نوع: نکته
.توان اینکار را انجام داد و فقط یک مقدار ثابت مشخص میگیرد
Enum Class and Sealed Class In Kotlin : its very important topic
را میتوان ازش نمونهsuccess ها یک نمونه ساخت ولی کالس های فرزندش یا درونش مثلSealedClass نمیتوان از: نکته
ساخت
را در کالس پیاده سازی کردDelegation می توان دیزاین پترنby از کلمه کلیدی: نکته
Lazy Delegate val heavyWork by lazy { DoHeavyWork ( ) Or any type varable like string , int … }
this instance never called when create object from HeavyWork class
یعنی یک چیزی را تحت نظر گرفتن و تغییرات آن را رصد کردنObservable : نکته » مهم
Jetpack Compose :
Text (
text = buildAnnotatedString {
withStyle (
style = SpanStyle (
color = Color.Black,
fontSize = 50.sp
)
){
append ( “ J ” )
}
append ( “ etpack ” )
},
color = Color ( 0x + 2number Alfa + 2number Red + 2number Green + 2number Blue )
fontSize = 30.sp , fontWeight = FontWeight.Bold ,fontStyle = FontStyle.Italic, textAlign = TextAlign.start,
textDexoration = TextDecoration.LineThrough
jetpack compose یا همان رابطه کاربری با استفاده ازUI یعنی ترسیم مجددRecomposition : نکته
() را اضافه میکنیم و برای به یادverticalScroll. ها میایمModifier در قسمتColumn یکScroll برای فعال کردن: نکته
: ( ) را درونش اضافه کنید بدین شکل زیرrememberScrollState بایدscroll داشتن وضعیت
Column ( Modifier.verticalScroll ( rememberScrollState ( ) ) ) { …. }
Image (
painter = painterResource (
id = R.drawable.imageName ,contentDescription = “” , contentScale = ContentScale.FillBounds,
)
: استفاده میکنیم به نامactivity برای باال نگه داشتن اسنک بار وقتی که کیبورد باالست از ویژگی در: نکته
LazyColumn () {
ItemsIndexed (
listOf( “ a ” , … )
){
}
Step To Implement Constraint Layout In Kotlin ::
1 – implementation ‘androidx.constraintlayout:constraintlayout-compose:1.0.1’
Constrain ( greenBox ) {
top.linkTo ( parent.top )
start.linkTo ( parent.top )
Constrain (redBox) {
top.linkTo ( parent.top )
start.linkTo ( parent.top )
}
GridView In Dart == LazyVerticalGrid In Kotlin
LazyVerticalGrid (
content = {
BoxCardItem ( … )
}})
Shortcut Kotlin Language :