Kotlin Language Features Related to Null Handling

Any software engineer with a Java background would find the null handling features in the Kotlin language interesting. Let's summarize this topic with some examples. Nullable types: In Kotlin, types are non-nullable by default. If you want a variable to be able to hold a null value, you need to explicitly declare its type as nullable using the Type? syntax. For example, String? denotes a nullable string, while String represents a non-nullable string. Safe calls (?.): Kotlin introduces the safe call operator (?.) for handling nullable types. It allows you to safely invoke a method or access a property on a nullable object. If the object is null, the expression returns null instead of throwing a NullPointerException. Example: data class Person(val name: String, val age: Int, val address: String?) fun main() {     // Create a person with a nullable address     val person1 = Person("John Doe", 25, "123 Main Street")     val person2 = Person("Jane Doe", 30,...

"REGULAR EXPRESSIONS" KONUSUNU TAM OLARAK VE KOLAYCA ANLAMAK

Herhangi bir dilde yazılmış bilgisayar programının derlenebilmesi veya yorumlanabilmesi için öncelikle "lexical analysis" denilen aşamadan geçmesi gerekiyor. Bu aşamada program kelimelere veya "token" denilen yapıtaşlarına ayrılıyor.

Programlama dilinin sentaksı, tokenlerin türleri hakkında bilgi verir. Örneğin birçok dilde yer alan bazı token türleri:

ID
Örnek: price calculateRate lastItem

NUM
Örnek: 73 0

REAL
Örnek: 12.5 0.23

COMMA
,

IF
if

Bir lexical analyser (lexer) yazabilmek için herhangi bir programlama dili kullanılabilir. Fakat özellikle "regular expressions" dili bu iş için kullanıma uygun.

Regular Expressions


Dil (language), bir string kümesi olarak tanımlansın. Örneğin Java dili, legal java programı oluşturabilecek tüm string lerin kümesidir. Bu durumda Java dili sonsuz elemana sahip bir küme.
Peki bir dili (belki sonsuz elemana sahip), nasıl sonlu ifadelerle (açıklamalarla) tanımlayabiliriz?

İşte burada "regular expressions" dilini kullanacağız. Bir regular expression, bir string kümesini ifade ediyor.

Alternation:


M ve N regular expression olsun. M | N yeni bir regular expression ifade eder.
Bir stringin M | N kümesinde yer alması için ya M ya da N kümesinde yer alması gerekir.

Örnekler:

a | b {"a", "b"}
1 | 2 | 3 {"1","2","3"}

Concatenation:


M ve N regular expression olsun. M . N yeni bir regular expression ifade eder.
Bir stringin M . N kümesinde yer alması için M veya N 'nin elemanlarından herhangi ikisinin birleştirilmesinden oluşması gerekir.

Örnekler:

a.b {"ab"}
a . (b | c) {"ab", "ac"}

Repetition:


M bir regular expression olsun. M* yeni bir regular expression ifade eder.
Bir stringin M* kümesinde yer alması için M kümesi içerisindeki sıfır veya daha fazla elemanın birleştirilmesinden oluşması gerekir.

Örnekler:

a* {"", "a", "aa", "aaaa", ...}
(a.b)* {"", "ab","abab","ababab", ...}
((a | b) · a)* {"", "aa","ba","aaaa","aaba", "baba","baaa","aabaaababa", ...}

Herhangi bir regular expression, semboller ve yukarıdaki operatörlerle ifade edilebilir. Fakat yararlı bazı kısaltmalar kullanılmaktadır:

MN M . N anlamındadır.
M+ M . M* anlamındadır. (Bir veya daha fazla)
M? Sıfır veya bir tane M
[abcd] a | b | c | d anlamındadır.
[a-d] a | b | c | d anlamındadır.
[a-c1-5] a | b | c | 1 | 2 | 3 | 4 anlamındadır.

Sonuç olarak yukarıda kuralları ifade edilen regular expressions dilini kullanarak, bir string kümesi ifade edebiliriz. Örneğin mümkün olan tüm e-mail adresleri kümesini ifade etmek için yukarıdaki basit kuralları kullanarak bir regular expression yazabiliriz.

Comments

Popular posts from this blog

Trie Data Structure and Finding Patterns in a Collection of Words

Virtual Memory

NOTES ON COMPUTER ARCHITECTURE: Some important concepts in computer architecture