0Pricing
Scala for Backend Engineering & Functional Programming · Ders

Genişletme Yöntemleri

Türlere yöntem ekleyin

Genişletme Yöntemleri, CoddyKit'te ücretsiz bir Scala for Backend Engineering & Functional Programming dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Scala for Backend Engineering & Functional Programming öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Scala for Backend Engineering & Functional Programming kursu toplamda 4 dersten oluşur.

Mevcut türlere yöntem ekleme

Uzantı yöntemleri, kaynağını değiştirmeden Int veya String gibi sahibi olmadığınız bir türe yeni yöntemler eklemenizi sağlar. Scala 3 bunun için temiz bir sözdizimi sunar.

object Main:
  extension (x: Int)
    def squared: Int = x * x
  def main(args: Array[String]): Unit =
    println(5.squared)

Uzantı sözdizimi

extension (param: Type) ifadesini, ardından bir veya daha fazla yöntem tanımını yazın. Her yöntemin içinde parametre, alıcı değere başvurur.

object Main:
  extension (s: String)
    def shout: String = s.toUpperCase + "!"
  def main(args: Array[String]): Unit =
    println("hello".shout)

Tek blokta birden çok yöntem

Tek bir extension yan tümcesi, aynı alıcı türü üzerinde çalışan birden çok yöntem tanımlayabilir.

object Main:
  extension (x: Int)
    def squared: Int = x * x
    def cubed: Int = x * x * x
    def isEven: Boolean = x % 2 == 0
  def main(args: Array[String]): Unit =
    println(4.squared)
    println(3.cubed)
    println(6.isEven)

Parametreli uzantı yöntemleri

Uzantı yöntemleri, alıcıya ek olarak kendi parametrelerini de alabilir.

object Main:
  extension (x: Int)
    def times(s: String): String = s * x
  def main(args: Array[String]): Unit =
    println(3.times("ab"))

Jenerik uzantı yöntemleri

Uzantılar jenerik olabilir ve List[A] gibi bütün bir tür ailesine yöntem ekleyebilir.

object Main:
  extension [A](xs: List[A])
    def second: A = xs(1)
  def main(args: Array[String]): Unit =
    println(List(10, 20, 30).second)
    println(List("a", "b").second)

Uzantılar neden örtük dönüşümlerden daha iyidir

Uzantı yöntemleri, eski “pimp-my-library” amacını daha güvenli biçimde gerçekleştirir: yalnızca adlandırılmış yöntemleri ekler ve başka yerlerde sessiz tür dönüşümleri yapılması riskini ortadan kaldırır.

object Main:
  extension (d: Double)
    def percentOf(total: Double): Double = d / total * 100
  def main(args: Array[String]): Unit =
    println(25.0.percentOf(200.0))

Uzantılar ve tür sınıfları

Uzantı yöntemleri, tür sınıflarıyla mükemmel uyum sağlar: davranışı bir given örneğiyle tanımlayın ve using kullanarak bunu bir yöntem olarak sunun.

trait Show[A]:
  def show(a: A): String

object Main:
  given Show[Int] with
    def show(a: Int): String = s"<$a>"

  extension [A](a: A)
    def display(using s: Show[A]): String = s.show(a)

  def main(args: Array[String]): Unit =
    println(42.display)

İşleçleri tanımlama

İşleçler yalnızca yöntemlerden ibaret olduğundan uzantılar, mevcut türlere sembolik işleçler de ekleyebilir.

object Main:
  extension (x: Int)
    def **(exp: Int): Int = math.pow(x, exp).toInt
  def main(args: Array[String]): Unit =
    println(2 ** 10)

Kapsam ve içe aktarmalar

Uzantı yöntemleri yalnızca kapsamda bulundukları yerlerde kullanılabilir. Bunları bir nesne içinde tanımlayıp kullanmak için içe aktararak erişim alanlarını denetimli tutabilirsiniz.

object StringOps:
  extension (s: String)
    def reversedWords: String = s.split(" ").reverse.mkString(" ")

object Main:
  import StringOps._
  def main(args: Array[String]): Unit =
    println("hello there world".reversedWords)

Uzantı yöntemlerini zincirleme

Uzantı yöntemleri normal değerler döndürür; bu nedenle akıcı işlem hatları oluşturmak için bunları yerleşik yöntemlerle zincirleyebilirsiniz.

object Main:
  extension (s: String)
    def emphasize: String = s"*$s*"
  def main(args: Array[String]): Unit =
    println("scala".toUpperCase.emphasize)

Pratik bir yardımcı

Uzantı yöntemleri, çağıran kodun doğal okunmasını sağlayan küçük alan yardımcıları için idealdir.

object Main:
  extension (n: Int)
    def isPrime: Boolean =
      n > 1 && (2 until n).forall(d => n % d != 0)
  def main(args: Array[String]): Unit =
    println((2 to 12).filter(_.isPrime).toList)

Kısa Kontrol

Yöntem ekleme açısından Scala 3 uzantı yöntemlerinin örtük dönüşümlere göre temel avantajı nedir?

Özet

Uzantı yöntemlerini öğrendiniz:

  • extension (x: Type) def ..., mevcut türlere yöntem ekler
  • Tek bir blokta işleçler de dâhil olmak üzere birden çok yöntem tanımlanabilir
  • Jenerik olabilir ve parametre alabilirler
  • using aracılığıyla tür sınıflarıyla doğal biçimde birlikte çalışırlar
  • Örtük dönüşümlerden daha güvenlidirler ve kullanılacakları kapsam içine içe aktarılmaları gerekir

Sıkça Sorulan Sorular

“Genişletme Yöntemleri” dersi ücretsiz mi?

Evet — “Genişletme Yöntemleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Scala for Backend Engineering & Functional Programming kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Scala for Backend Engineering & Functional Programming kursu toplamda 4 dersten oluşur.

“Genişletme Yöntemleri” dersinde ne öğreneceğim?

Türlere yöntem ekleyin Scala for Backend Engineering & Functional Programming ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Scala for Backend Engineering & Functional Programming öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Scala for Backend Engineering & Functional Programming, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Genişletme Yöntemleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Scala for Backend Engineering & Functional Programming dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Scala for Backend Engineering & Functional Programming dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Örtük Parametreler
  2. Scala 3 given/using
  3. Örtük Dönüşümler
  4. Genişletme Yöntemleri
← Scala for Backend Engineering & Functional Programming Sayfasına Dön