Matematikçilerin kendi küçük komik yolları vardır, bu yüzden programcıların dediği gibi "o zaman f
onu x
parametre olarak geçirmeyi fonksiyon olarak adlandırıyoruz " demek yerine " f
argümana fonksiyon uygulama" hakkında konuşurlar x
.
Matematik ve bilgisayar biliminde, Uygula argümanlara fonksiyonlar uygulayan bir fonksiyondur.
Vikipedi
apply
Scala'da Nesneye Yönelik ve Fonksiyonel paradigmalar arasındaki boşluğu kapatma amacına hizmet eder. Scala'daki her fonksiyon bir nesne olarak temsil edilebilir. Her işlevin ayrıca bir OO türü vardır: örneğin, bir Int
parametre alan ve bir döndüren işlev Int
OO türüne sahip olacaktır Function1[Int,Int]
.
// define a function in scala
(x:Int) => x + 1
// assign an object representing the function to a variable
val f = (x:Int) => x + 1
Scala'da her şey bir nesne olduğundan f
, şimdi Function1[Int,Int]
nesneye referans olarak değerlendirilebilir . Örneğin, toString
devralınan Any
, saf bir işlev için imkansız olan yöntemi çağırabiliriz , çünkü işlevlerin yöntemleri yoktur:
f.toString
Veya yöntemi Function1[Int,Int]
çağırıp iki farklı işlevi bir araya getirerek başka bir nesne tanımlayabiliriz :compose
f
val f2 = f.compose((x:Int) => x - 1)
Şimdi işlevi gerçekten yürütmek istiyorsak veya matematikçinin "argümanlarına bir işlev uygula" dediği gibi apply
, Function1[Int,Int]
nesneyi yöntemi çağırırız :
f2.apply(2)
f.apply(args)
Nesne olarak temsil edilen bir işlevi her yürütmek istediğinizde yazmak Nesneye Dayalı yoldur, ancak çok fazla ek bilgi eklemeden koda çok fazla dağınıklık ekler ve daha standart gösterimi kullanmak güzel olurdu, örneğin olarak f(args)
. Scala derleyicisinin devreye girdiği yer burasıdır ve f
bir işlev nesnesine f (args)
başvurumuz olduğunda ve temsil edilen işleve bağımsız değişkenler uygulamak için yazdığımızda derleyici f (args)
, nesne yöntemi çağrısına sessizce genişler f.apply (args)
.
Scala'daki her işlev bir nesne olarak ele alınabilir ve başka şekilde de çalışır - apply
yönteme sahip olması koşuluyla, her nesne bir işlev olarak ele alınabilir . Bu tür nesneler fonksiyon gösterimlerinde kullanılabilir:
// we will be able to use this object as a function, as well as an object
object Foo {
var y = 5
def apply (x: Int) = x + y
}
Foo (1) // using Foo object in function notation
Bir nesneyi işlev olarak ele almak istediğimiz birçok kullanım durumu vardır. En yaygın senaryo bir fabrika modelidir . Bir fabrika yöntemini kullanarak koda karmaşa eklemek yerine, apply
ilişkili bir sınıfın yeni bir örneğini oluşturmak için bir dizi bağımsız değişkene itiraz edebiliriz :
List(1,2,3) // same as List.apply(1,2,3) but less clutter, functional notation
// the way the factory method invocation would have looked
// in other languages with OO notation - needless clutter
List.instanceOf(1,2,3)
Bu nedenle apply
yöntem, Scala'daki işlevler ve nesneler arasındaki boşluğu kapatmanın kullanışlı bir yoludur.