Gotowi na nową porcję wiedzy z Kotlina? Na wieczór przygotowałem dla Was tłumaczenie i wykorzystywanie funkcji "readline" w języku Kotlin! Temat króciutki i zwięzły. Zapraszam do środka!

"READLINE" W JĘZYKU KOTLIN JEST JAK "SCANNER" W JĘZYKU JAVA

"Scanner". Coś Wam to przypomina? Bo dla mnie to brzmi jak klasa dzięki której odwoływało się do metody "nextLine" i pobierało się wprowadzony przez nas łańcuch znaków. Wspomniana funkcja "readLine" czyni dokładnie to samo, tylko bez potrzeby definiowania żadnych obiektów ani klas na uboczu. To jest już wbudowane ("built-in") i zawsze pod ręką.

WYWOŁYWANIE

Funkcja "readline" w języku Kotlin nie wymaga żadnych importów, żadnych obiektów, żadnych dodatkowych zależności. Wywołujemy ją bardzo podobnie jak "println", tylko zwraca ona łańcuch znaków, zatem najprawdopodobniej będziecie chcieli to podstawić do jakiejś zmiennej, bądź parametru do innej funkcji:

println("Wprowadź dowolny tekst:")
println(readLine())

Znawcy Javy musieli się użerać z tworzeniem instancji typu "Scanner":

PrintStream ps = System.out;
Scanner scanner = new Scanner(System.in);

ps.println("Wprowadź dowolny tekst: ");
ps.println(scanner.nextLine());

Ten sam efekt, podobne instrukcje, zero trudności!

Funkcja "readline" w języku Kotlin

"readline" w języku Kotlin pozwala bardzo szybko i przyjemnie odczytywać pojedynczy wiersz ze strumienia wejściowego bez konieczności tworzenia jakichkolwiek obiektów.

Pozwolę sobie zwrócić uwagę na jeden haczyk, o którym większość ludzi często zapomina. Funkcja zwraca łańcuch znaków! W zależności od zapotrzebowania, może to rodzić horrendalne problemy przy pobieraniu ze strumienia wejściowego innych prostych typów danych, dajmy na to liczbę całkowitą. Nie podstawicie łańcucha pod "Int" tak po prostu, bo wymagana jest konwersja. Ale chwileczkę! A co z zabezpieczeniem przed wprowadzaniem błędnych wartości? Jedyny sposób to pętla "while".

Aby uczynić ten artykuł nieco bardziej wartościowym, udostępniam kody źródłowe funkcji, które nie przepuszczają użytkownika dalej, dopóki nie wprowadzi satysfakcjonującej wartości. Oto pętla "do while", która charakteryzuje się wymagalnością wprowadzenia dowolnego łańcucha znaków o długości co najmniej trzech znaków:

fun typedString() : String
{
	var s : String?

	do
	{
		println("Podaj dowolny łańcuch znaków (co najmniej 3 znaki): ")

		s = readLine()
	}
	while (s.isNullOrEmpty() || s.length < 3)

	return s
}

a ten kod będzie egzekwował wprowadzenie liczby wraz z uwzględnieniem zgodności typu czy w łańcuchu nie wplątał się jakikolwiek znak niebędący liczbą, również z użyciem "readline" w języku Kotlin:

fun typedInteger() : Int
{
	var s : String?

	do
	{
		println("Podaj dowolną liczbę całkowitą: ")

		s = readLine()
	}
	while (s.isNullOrEmpty() || s[0] != '-' && !s.all { Character.isDigit(it) })

	return s.toInt()
}

To są tylko moje przykłady. Możecie to sobie zapisać inaczej. W każdym razie, oba fragmenty były przeze mnie testowane i działają w 100%. Aby w pełni zrozumieć powyższe fragmenty, wymaga się znajomości typów akceptujących wartości puste, konwersji na inny typ danych, a także czym jest predykat i jak on działa w kontekście metody "all".


Bezboleśnie dotarliśmy do końca artykułu. Pamiętajcie tylko o koniecznej konwersji na inny typ jeśli pragniecie ukierunkować łańcuch znaków na inny typ prosty (tylko prosty, no bo ciężko mi sobie wyobrazić transformację łańcucha na obiekt).

PODOBNE ARTYKUŁY