Theory
Decisions जो एक Value वापस देते हैं
FestConnect Mobile को events classify करना पड़ता है: 0 seats वाला एक event 'Sold out' है, 1 से 50 'Filling up' है, ज़्यादा 'Available' है। Java (BCA403) में आप एक if-else chain या breaks वाला एक switch लिखते।
Kotlin इसे ज़्यादा elegantly करता है, और दो twists के साथ जो Java programmers को surprise करते हैं: इसका if और when एक value RETURN करने वाले EXPRESSIONS हैं, और इसका when (switch replacement) सिर्फ़ single values नहीं, RANGES और TYPES match कर सकता है। यह lesson Kotlin conditionals और ranges cover करता है, जहाँ language अपनी conciseness दिखाती है।
Theory
एक Expression की तरह if
Kotlin का if एक statement की तरह काम करता है (Java की तरह) AND एक expression की तरह जो एक value return करता है:
val max = if (a > b) a else b
पूरा if एक value में evaluate होता है और assign होता है। यह Java के ternary operator को REPLACE करता है (a > b ? a : b): Kotlin के पास कोई ternary नहीं है क्योंकि if already यह काम करता है, ज़्यादा readably। जो branch चलती है वह value supply करती है।
यह expression nature Kotlin में एक theme है: वे constructs जो Java में मात्र statements थे यहाँ अक्सर values return करते हैं, आपको val result = if (...) ... else ... cleanly लिखने देते हुए।
Practical
Ranges वाला when, और Expression की तरह if
fun classify(seats: Int): String {
// when: a supercharged switch, also an expression (returns a value)
return when (seats) {
0 -> "Sold out" // single value
in 1..50 -> "Filling up" // a RANGE (1 to 50 inclusive)
in 51..200 -> "Available"
else -> "Plenty of seats" // else (like default)
}
}
fun main() {
println(classify(0)) // Sold out
println(classify(30)) // Filling up (30 is in 1..50)
println(classify(500)) // Plenty of seats
// if as an expression (replaces Java's ternary):
val a = 7; val b = 4
val max = if (a > b) a else b
println(max) // 7
}
Theory
when और Ranges
when Kotlin का switch है, पर कहीं ज़्यादा capable, और कोई break नहीं चाहिए:
- एक single value match कीजिए:
0 -> ... - multiple values:
1, 2 -> ... - एक RANGE:
in 1..50 -> ... - एक type:
is String -> ... else(default जैसा)
और when एक EXPRESSION है, तो यह directly एक value return कर सकता है (listing में return when)।
Ranges .. इस्तेमाल करती हैं: 1..10 1 से 10 INCLUSIVE है। ये when में appear होती हैं (in 1..50), loops में (for (i in 1..5)), और conditions में (if (x in 1..10))। Variants: until (exclusive end, 1 until 10 1 से 9 है), downTo (counting down), step। Ranges numeric conditions को लगभग English जैसा पढ़ने लायक बनाती हैं: if (seats in 1..50)।
Quiz
Kotlin का when Java के switch से कैसे अलग है?
- when को switch की तरह हर branch के बाद एक break चाहिए
- when को कोई break नहीं चाहिए, ranges (in 1..50) और types (is String) match कर सकता है, और एक EXPRESSION है जो एक value return करता है
- when सिर्फ़ single integer values match कर सकता है
- when और switch identical हैं
Show the answer
when को कोई break नहीं चाहिए, ranges (in 1..50) और types (is String) match कर सकता है, और एक EXPRESSION है जो एक value return करता है
Kotlin का when एक ज़्यादा powerful switch है: इसे कोई break नहीं चाहिए (कोई fall-through नहीं जिससे guard करना पड़े, Java के switch के उलट जिसे हर case पर break चाहिए था, BCA403), यह सिर्फ़ single values नहीं, RANGES (in 1..50), TYPES (is String), और multiple values (1, 2 ->) match कर सकता है, और यह एक EXPRESSION है तो यह directly एक value return कर सकता है (val x = when(...))। Option A ग़लती से Java की break requirement import करता है। Option C when की rich matching (ranges, types) को undersell करता है। Option D real differences को deny करता है। तो when switch से cleaner और ज़्यादा capable है, लंबी if-else chains को elegantly replace करते हुए, और no-break design Java का classic forgotten-break bug हटाता है।
Think first
if या when: FestConnect के लिए कौन सा?
FestConnect Mobile को (a) दो seat counts में से बड़ा pick करना है, और (b) एक event को seat range से पाँच categories में से एक में classify करना है। हर एक में कौन सा conditional fit होता है, और क्यों? फिर tap कीजिए।
Show the answer
(a) दो values में से बड़ा pick करना एक simple two-way decision है: IF इस्तेमाल कीजिए (एक expression की तरह): val max = if (a > b) a else b। Clean और direct। (b) एक event को seat RANGE से FIVE categories में classify करना एक value पर एक multi-way match है: ranges वाला WHEN इस्तेमाल कीजिए: when(seats) { in 0..0 -> ...; in 1..50 -> ...; ... }। एक when एक लंबी if-else-if chain से कहीं बेहतर पढ़ता है और naturally ranges express करता है। Rule of thumb: boolean या two-way decisions के लिए IF; एक value को कई cases से match करने के लिए WHEN, especially ranges या types के साथ। दोनों expressions हैं, तो दोनों एक value return कर सकते हैं। सही एक choose करना code को readable रखता है: जब एक decision में कई branches हों, when लगभग हमेशा जीतता है।
Watch out
Conditional Traps
when में break की Expectation: कोई नहीं है; हर branch अकेले चलती है (कोई fall-through नहीं)।
Expression की तरह when को else चाहिए: एक value return करता when exhaustive होना चाहिए; else add कीजिए (जब तक सारे cases covered न हों, जैसे एक enum)।
.. बनाम until: 1..10 में 10 शामिल है; 1 until 10 9 पर रुकता है; boundaries के लिए सही एक पिक कीजिए।
एक Ternary ढूँढना: Kotlin के पास कोई नहीं है; एक expression की तरह if इस्तेमाल कीजिए।
सिर्फ़ Numbers-ish के लिए Ranges: .. comparable types के लिए काम करता है (Int, Char); इसे वहाँ इस्तेमाल कीजिए जहाँ ordering makes sense करे।
Theory
Decisions हो गए; अब Collections
FestConnect Mobile if, when और ranges से decide और classify कर सकता है। Real apps data की LISTS hold करते हैं, events की एक list, registrants की। अगला lesson Kotlin के arrays और lists cover करता है, इन्हें कैसे create, access और modify करें, important read-only बनाम mutable list distinction शामिल करते हुए जो val बनाम var को echo करता है। फिर loops Kotlin की fundamentals complete करते हैं, और OOP unit app की classes build करता है।
Summary
Key takeaways
- Kotlin का if एक statement AND एक EXPRESSION दोनों है जो एक value return करता है: val max = if (a > b) a else b (Java के ternary को replace करता है)।
- when Kotlin का switch replacement है: कोई break नहीं चाहिए, और यह एक expression भी है।
- when single values, multiple values (1, 2 ->), ranges (in 1..50 ->), और types (is String ->) match करता है, else default की तरह।
- Ranges .. इस्तेमाल करती हैं: 1..10 inclusive है; until exclusive-end है (1 until 10 = 1 से 9); downTo counts down; step skips।
- Ranges when, loops (for i in 1..5), और conditions (if (x in 1..10)) में appear होती हैं।
- Two-way/boolean decisions के लिए if इस्तेमाल कीजिए, एक value को कई cases से match करने के लिए when (especially ranges/types)।
- Memory hook: if और when values return करते हैं; when को कोई break नहीं चाहिए और ranges और types match करता है।