Yeni bir dile geçmek göz korkutucu bir iş olabilir. Başarının formülü, yavaş yavaş başlamak, parçalar halinde hareket etmek ve ekibinizi başarıya ulaştırmak için sık sık test yapmaktır. Kotlin, JVM bayt koduna derlendiği ve Java ile tamamen birlikte çalışabildiği için taşımayı kolaylaştırır.
Ekip oluşturma
Taşıma işleminden önceki ilk adım, ekibiniz için ortak bir temel anlayışı oluşturmaktır. Ekibinizin öğrenme sürecini hızlandırmak için faydalanabileceğiniz birkaç ipucunu burada bulabilirsiniz.
Form çalışma grupları
Çalışma grupları, öğrenmeyi ve elde tutmayı kolaylaştırmanın etkili bir yoludur. Araştırmalar, öğrendiklerinizi bir grup ortamında anlatmanın materyalin pekiştirilmesine yardımcı olduğunu gösteriyor. Grubun her üyesi için bir Kotlin kitabı veya başka çalışma materyalleri alın ve gruptan her hafta birkaç bölümden geçmelerini isteyin. Her toplantıda grup öğrendiklerini karşılaştırmalı ve varsa soruları veya gözlemleri tartışmalıdır.
Eğitim kültürü oluşturun
Herkes kendini öğretmen olarak görmese de herkes öğretebilir. Bir teknoloji veya ekip liderinden bireysel bir katılımcıya kadar, herkes başarıya ulaşmasına yardımcı olabilecek bir öğrenme ortamını teşvik edebilir. Bunu kolaylaştırmanın bir yolu da düzenli sunumlarda ekipten bir kişinin öğrendiği veya paylaşmak istediği bir şey hakkında konuşmaktır. Çalışma grubunuzdan faydalanarak ekibinizi bu dili rahat hissettiği bir noktaya ulaşana kadar gönüllülerden her hafta yeni bir bölüm sunmalarını isteyerek kullanabilirsiniz.
Şampiyonu belirleyin
Son olarak, öğrenme çalışmalarını yönetecek bir şampiyon belirleyin. Benimseme sürecini başlattığınızda bu kişi bir konu uzmanı (SME) olarak görev alabilir. Bu kişiyi Kotlin ile ilgili tüm pratik toplantılarınıza dahil etmek önemlidir. İdeal olarak, bu kişi zaten Kotlin konusunda tutkuludur ve işle ilgili biraz bilgi sahibidir.
Yavaş yavaş entegre edin
Yavaş yavaş başlamak ve ekosistemin hangi kısımlarının önce taşınacağı konusunda stratejik bir şekilde düşünmek çok önemlidir. Genellikle bunu ana uygulama yerine kuruluşunuzdaki tek bir uygulama için ayırmak en iyi seçenektir. Seçilen uygulamayı taşıma konusunda her durum birbirinden farklıdır. Ancak burada, işe koyulup başlamanız gereken birkaç yaygın noktayı aşağıda bulabilirsiniz.
Veri modeli
Veri modeliniz muhtemelen birkaç yöntemin yanı sıra çok sayıda durum bilgisi içerir. Veri modelinde toString()
, equals()
ve hashcode()
gibi yaygın yöntemler de olabilir. Bu yöntemlerin geçişi genellikle yapılabilir ve birim
tek tek kolayca test edilebilir.
Örneğin, aşağıdaki Java snippet'ini varsayalım:
public class Person {
private String firstName;
private String lastName;
// ...
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return Objects.equals(firstName, person.firstName) &&
Objects.equals(lastName, person.lastName);
}
@Override
public int hashCode() {
return Objects.hash(firstName, lastName);
}
@Override
public String toString() {
return "Person{" +
"firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
'}';
}
}
Burada gösterildiği gibi, Java sınıfını tek bir Kotlin satırıyla değiştirebilirsiniz:
data class Person(var firstName: String?, var lastName : String?)
Bu kod daha sonra mevcut test paketinize göre birim testine tabi tutulabilir. Buradaki amaç, aynı anda tek bir modelle küçük adımlarla başlamak ve davranış değil, çoğunlukla durum olan geçiş sınıflarıdır. Yol boyunca sık sık test etmeyi unutmayın.
Testleri taşı
Göz önünde bulundurulması gereken bir başka başlangıç yolu da mevcut testleri dönüştürmek ve Kotlin'de yeni testler yazmaya başlamaktır. Bu sayede, uygulamanızla birlikte göndermeyi planladığınız kodu yazmadan önce ekibinize rahatça konuşabilmeleri için zaman tanıyabilirsiniz.
Yardımcı program yöntemlerini uzantı işlevlerine taşıma
Statik yardımcı program sınıfları (StringUtils
, IntegerUtils
, DateUtils
, YourCustomTypeUtils
vb.) Kotlin uzantı işlevleri olarak temsil edilebilir ve mevcut Java kod tabanınız tarafından kullanılabilir.
Örneğin, birkaç yöntemi olan bir StringUtils
sınıfınız olduğunu düşünün:
package com.java.project;
public class StringUtils {
public static String foo(String receiver) {
return receiver...; // Transform the receiver in some way
}
public static String bar(String receiver) {
return receiver...; // Transform the receiver in some way
}
}
Daha sonra bu yöntemler, aşağıdaki örnekte gösterildiği gibi uygulamanızın başka bir bölümünde kullanılabilir:
...
String myString = ...
String fooString = StringUtils.foo(myString);
...
Kotlin uzantı işlevlerini kullanarak Java çağrılarına aynı Utils
arayüzünü sağlarken aynı zamanda büyüyen Kotlin kod tabanınız için daha kısa ve öz bir API sunabilirsiniz.
Bunu yapmak için, IDE tarafından sağlanan otomatik dönüştürmeyi kullanıp bu Utils
sınıfını Kotlin'e dönüştürerek başlayabilirsiniz. Örnek çıkış aşağıdaki gibi görünebilir:
package com.java.project
object StringUtils {
fun foo(receiver: String): String {
return receiver...; // Transform the receiver in some way
}
fun bar(receiver: String): String {
return receiver...; // Transform the receiver in some way
}
}
Ardından, sınıfı veya nesne tanımını kaldırın, her işlev adının önüne bu işlevin uygulanması gereken türü ekleyin ve bunu, aşağıdaki örnekte gösterildiği gibi işlevin içindeki türe referans vermek için kullanın:
package com.java.project
fun String.foo(): String {
return this...; // Transform the receiver in some way
}
fun String.bar(): String {
return this...; // Transform the receiver in some way
}
Son olarak, derlenen adı aşağıdaki örnekte gösterildiği gibi uygulamanızın geri kalanıyla uyumlu hale getirmek için kaynak dosyanın üst kısmına bir JvmName
ek açıklaması ekleyin:
@file:JvmName("StringUtils")
package com.java.project
...
Nihai sürüm aşağıdakine benzer olacaktır:
@file:JvmName("StringUtils")
package com.java.project
fun String.foo(): String {
return this...; // Transform `this` string in some way
}
fun String.bar(): String {
return this...; // Transform `this` string in some way
}
Bu işlevlerin artık her dille eşleşen kurallarla Java veya Kotlin kullanılarak çağrılabileceğini unutmayın.
Kotlin
... val myString: String = ... val fooString = myString.foo() ...
Java
... String myString = ... String fooString = StringUtils.foo(myString); ...
Taşıma işlemini tamamlama
Ekibiniz Kotlin'i kullanmaya alıştıktan ve daha küçük alanları taşıdıktan sonra parçalar, etkinlikler, ViewModel
nesneleri ve iş mantığıyla ilgili diğer sınıflar gibi daha büyük bileşenleri ele almaya geçebilirsiniz.
Dikkat edilmesi gereken noktalar
Java’nın kendine özgü bir tarzı olduğu gibi, Kotlin de kısa ve öz bir deyimsel tarzı vardır. Ancak başlangıçta ekibinizin oluşturduğu Kotlin kodunun, yerini alacak olan Java koduna daha çok benzediğini fark edebilirsiniz. Ekibinizin Kotlin deneyimi büyüdükçe bu durum da zamanla değişir. Unutmayın, kademeli değişim başarının anahtarıdır.
Kotlin kod tabanınız büyürken tutarlılık sağlamak için yapabileceğiniz birkaç şey:
Ortak kodlama standartları
Benimseme sürecinizin başlarında standart bir kodlama kuralları kümesi tanımladığınızdan emin olun. Android Kotlin stil kılavuzundan anlamlı olanları inceleyebilirsiniz.
Statik analiz araçları
Android lint ve diğer statik analiz araçlarını kullanarak ekibiniz için belirlenen kodlama standartlarını zorunlu kılın. Üçüncü taraf bir Kotlin linter aracı olan klint, Kotlin için ek kurallar da sağlar.
Sürekli entegrasyon
Ortak kodlama standartlarına uyduğunuzdan ve Kotlin kodunuz için yeterli test kapsamı sağladığınızdan emin olun. Bunun otomatik bir derleme işleminin parçası olması, tutarlılığın ve bu standartlara bağlılığın sağlanmasına yardımcı olabilir.
Birlikte çalışabilirlik
Kotlin, çoğunlukla Java ile sorunsuz bir şekilde birlikte çalışır, ancak aşağıdakilere dikkat edin.
Boş değer atanabilirliği
Kotlin, Kotlin tarafında null olabilirliği tahmin etmek için derlenmiş kodda null değer ek açıklamalarını kullanır. Ek açıklamalar sağlanmazsa Kotlin varsayılan olarak bir platform türünü kullanır. Bu da null veya null yapılamayan tür olarak değerlendirilebilir. Ancak, dikkatli bir şekilde ele alınmadığı takdirde bu durum çalışma zamanı NullPointerException
sorunlarına yol açabilir.
Yeni Özelliklerden Yararlanın
Kotlin, geliştirme hızını artırmak için birçok yeni kitaplık ve sözdizimsel şeker sağlayarak ortak platformu azaltmaya yardımcı oluyor. Bununla birlikte, Kotlin'in toplama işlevleri, eş yordamlar ve lambda'lar gibi standart kitaplık işlevlerini kullanırken dikkatli ve metodolojik olun.
Yeni Kotlin geliştiricilerinin en sık karşılaştığı tuzakları burada bulabilirsiniz. Aşağıdaki Kotlin kodunu ele alalım:
val nullableFoo: Foo? = ...
// This lambda executes only if nullableFoo is not null
// and `foo` is of the non-nullable Foo type
nullableFoo?.let { foo ->
foo.baz()
foo.zap()
}
Bu örnekteki amaç, nullableFoo
null değilse foo.baz()
ve foo.zap()
politikalarını çalıştırmak ve bu sayede NullPointerException
kullanmaktan kaçınmaktır. Bu kod beklendiği gibi çalışsa da, aşağıdaki örnekte gösterildiği gibi kullanımı basit bir null kontrol ve smart cast'e göre daha az sezgiseldir:
val nullableFoo: Foo? = null
if (nullableFoo != null) {
nullableFoo.baz() // Using !! or ?. isn't required; the Kotlin compiler infers non-nullability
nullableFoo.zap() // from guard condition; smart casts nullableFoo to Foo inside this block
}
Test
Kotlin'de sınıflar ve işlevleri varsayılan olarak uzatmaya kapalıdır. Alt sınıflandırmak istediğiniz sınıf ve işlevleri açıkça açmanız gerekir. Bu davranış, devralmaya kıyasla kompozisyonu teşvik etmek için seçilen bir dil tasarımı kararıdır. Kotlin, kompozisyonu basitleştirmeye yardımcı olması amacıyla, yetki aracılığıyla davranışı uygulamak için yerleşik desteğe sahiptir.
Bu davranış, test sırasında davranışları geçersiz kılmak için arayüz uygulaması veya devralma kullanan Mockito gibi aldatma çerçeveler için bir sorun oluşturur. Birim testlerinde, Mockito'nun son sınıflarla ve yöntemlerle ilgili alıştırma yapmanıza olanak tanıyan Örnek Oluşturucu özelliğinin kullanımını etkinleştirebilirsiniz. Alternatif olarak, derleme işleminin bir parçası olarak test etmek istediğiniz Kotlin sınıfını ve üyelerini açmak için All-Open derleyici eklentisini kullanabilirsiniz. Bu eklentiyi kullanmanın birincil avantajı, hem birim hem de araçlı testlerle çalışmasıdır.
Daha fazla bilgi
Kotlin kullanımıyla ilgili daha fazla bilgi için aşağıdaki bağlantılara göz atın:
- Android'in Kotlin öncelikli yaklaşımı
- Kotlin'i kullanmaya başlamayla ilgili kaynaklar
- Kotlin'i öğrenen Java kullanıcıları için kaynaklar
- Java programcılarının deyimsel Kotlin'i öğrenmesine ve yazmasına yardımcı olan bir kaynak koleksiyonu olan Java'dan Kotlin öğrenme rotası.