Пътуване на наивници към майсторството.

✯ Table of content 

✯ Why kotlin.
✯ Anatomy on kotlin main function.
✯ What happens after RUN.
✯ Variable.
✯ Kotlin's basic types.
✯ Converting one type to other.
✯  Array.

                          ★THANK YOU★

Защо kotlin:

Kotlin превзема света на програмирането като буря, независимо че е един от най-младите навлизания в града на програмирането. Така че Защо Kotlin?
Основното предимство на kotlin е, че има много модерни езикови функции като:
Kotlin е ясен, кратък и четлив .
Въпреки че Kotlin е чист ООП език, той също поддържа процедурно програмиране.
Kotlin практически елиминира тип грешка, която обикновено се случва в друг език за програмиране (изключение за нулев указател, грешка при преобразуване на тип). Следователно резултатният код е много по-безопасен, по-надежден и по-малко податлив на грешки.

Моята причина да избера kotlin е доста по-проста. Тъй като кодът на kotlin е съобразен с JVM (виртуална машина на Java) байт код, което означава, че можем да използваме kotlin практически навсякъде като заместител на Java. Kotlin може да кодира и да изпълнява сървъри в облака, в браузъри и мобилни устройства (KMM).

Анатомия на основната функция на kotlin:

Горната функция показва „Hi Kotlin !!“ в изходния прозорец на IDE. Всеки път, когато искаме да изпълним който и да е блок от код, той трябва да бъде ограден във фигурните скоби на функцията, наречена main. Всеки път, когато изпълнявате своя код, JVM търси основната функция, която действа като начална точка на изпълнение на кода.

// Question - DO we have to add main function to every file ?
// No, an kotlin application can have multiple file
// but we may only need one main function indicating
// the start of program execution.

Какво се случва след RUN.

След като използваме командата Run, нашата IDE преминава през няколко стъпки, преди да ни произведе резултата от нашия код.
IDE компилира нашия изходен код на kotlin в JVM байткод, който създава нов клас файл в нашия случай main.kt файл към mainkt.class файл.
След това IDE стартира JVMи изпълнява файла mainkt.class, показвайки ни
Здравей Котлин!!“ като желания изход.

Променлива:

Променливите са една от ключовите съставки, необходими за написването на страхотен код.
В kotlin създаваме променлива, като казваме на компилатора каква стойност трябва да има променливата, какво име да й даде и дали искаме да използваме променливата повторно за различни стойности или не.

var variableVar = 8 // var - mutable - read and write
val variableVal = 8 // val - immutable - read only 

Какво се случва с Var & Val под капака.
Тъй като kotlin е статично типизиран и за да осигури безопасността на типа, за да работи, компилаторът трябва да знае типа на променливата. И компилаторът kotlin гарантира това, като извежда типа на променливата от стойността, която й е присвоена.

Нека декларираме променлива като:

var variableVar = 10

Тук присвояваме числото 10 на нова променлива с име variableVar.
Тъй като компилаторът знае, че 10 е цяло число и така под капака ще създаде нов обект Intи прикачете стойност 10 към него.
След това компилаторът използва типа на обекта, за да направи извод за типа на променливата .
За горния пример типът на обекта е „Int“, следователно типът на променливата също е „Int“ и променливата остава в този тип завинаги.
И така, как обектът е присвоен на променливата?
Самият обект не влиза в променливата, вместо препратка към обекта влиза в променливата. Тъй като променливата съдържа препратка към обекта, тя има достъп до самия обект.

Val срещу Var :
Ако декларираме променливата с „val”ключова дума, препратката към обекта остава в променливата завинаги и не може да бъде заменена . Но ако декларираме променливата с „var”ключова дума, можем да присвоим друга стойност на променливата.

Основните типове данни на Kotlin:

В Kotlin типовете данни са разделени на следните категории:

✯ Цели числа {Byte, Short, IntиLong} .
✯ Плаващи точки {Float
и Double } .
✯ Символи и низове {Char
и String} .
✯ Булеви стойности
✯ Масив

Компилаторът Kotlin ще ви позволи само да присвоите стойност на променлива, ако стойността и променливата са съвместими (т.е. принадлежат към един и същи тип). Ако стойността е твърде голяма или е от грешен тип, кодът няма да се компилира или ще се държи по неочакван начин.

// Question find the output ?
var a = 9
var b = a
var c : Long = a 
print("a = $a , b = $b , c = $c")

Те над кодовия блок няма да се компилират и IDE ще изведе грешка „Type mismatch: Required: Long Found: Int“.

Преобразуване на един тип в друг:

Горният пример няма да работи, тъй като се опитваме да присвоим стойност Intна променлива Long. И така,Как да се противопоставим на това?
За да компилираме кода успешно, първо трябва да конвертираме стойността в същия тип. Така че преобразувайте типа Int в тип Long. Можем да направим това, като използваме функцията на Int Object.

Както знаем, променлива a съдържа препратката към Int Object със стойност 9 .
А да си обект означава, че има две неща1) Състояние 2) Поведение.

Състояние” на обект се отнася до данните, които са свързани с обекта: това са свойства и стойности. Например,числов обект има числова стойност 9 (в нашия случай).
Поведението“ на обект описва нещата, които обектът може да направи или това може да се изпълни върху него. Пример, числов обект знае как да извършва основна математика, да преобразува стойността си в обект от различен числов тип.

// working code 
var a = 9
var b = a
var c : Long = a.toLong() 
print("a = $a , b = $b , c = $c")

✯ По време на преобразуването направете каквото и да е извън преливането, т.е. преобразуването на Float в Int ще върне само цялата част от него.

Вземане на информация от потребителя:

В този раздел ще научите как да приемате потребителски вход и да го показвате като изход.
За да приемате низ като потребителски вход в Kotlin, можете да използвате функцията readline().

fun main() {
    print("Enter name : ")
    val nameInput = readLine()!!
    println("Hi!!: $nameInput")
}

Възможно е да вземете вход като низ с помощта на функцията readLine() и да го преобразувате изрично в стойности от друг тип данни (като Int).

масив:

Масивът е контейнер, който съдържа данни (стойности) от един единствен тип. Защо масив? Да предположим, че искате да съхраните имена на 20 студента. За да направите това, използването на променлива ще стане тромаво за бързо. Вместо това можем да използваме масив. Масивите са страхотни, ако искате бързо и мръсно групиране на неща (без определен ред). Те са лесни за създаване и ние получаваме бърз достъп до всеки елемент в масива.

Можем да създадем масив с помощта на функцията arrayOf(). Тук създадохме масив от 5 елемента (Int 1,2,3,4,5) и присвоихме на променлива с име arrayIs.

val arrayIs= arrayOf(1,2,3,4,5)
print(arrayIs[0]) // 1
var arrayWas:Array<Int> =  arrayOf(1,2,3,4,5)

Можем да осъществим достъп до елементите на масив с помощта на „[]” или .get().
Можем да получим размера на масива с помощта на “.size .
Компилиторът извежда типа на масива от неговите елементи, но можем изрично да дефинираме и тип масиви.

✯ КРАЯТ

★В следващата статия ще говорим за контролни потоци в kotlin.

★БЛАГОДАРЯ ВИ★

👋 Ако намирате това за полезно, моля, щракнете върху бутона за пляскане 👏 по-долу няколко пъти, за да покажете подкрепата си за автора 👇

🚀Присъединете се към общността на разработчиците на FAUN и получавайте подобни истории във входящата си поща всяка седмица