Yeni bir dile geçmek, göz korkutucu bir iş olabilir. Başarının sırrı, yavaş yavaş başlamak, parçalara çıkmak ve ekibinizi başarıya hazırlamak için sık sık test etmektir. Kotlin, JVM bayt koduyla derlenir ve Java ile tamamen birlikte çalışabilir. Bu nedenle taşıma işlemini kolaylaştırır.
Ekibi oluşturma
Taşıma işleminden önce ilk adım, ekibiniz için ortak bir temel anlayış geliştirmektir. Ekibinizin daha hızlı öğrenmesini sağlamak için faydalı bulabileceğiniz birkaç ipucunu aşağıda bulabilirsiniz.
Form çalışma grupları
Çalışma grupları, öğrenimi ve elde tutmayı kolaylaştırmak için etkili bir yöntemdir. Araştırmalar, bir grup ortamında öğrendiklerinizi pekiştirmenin materyali pekiştirmeye yardımcı olduğunu gösteriyor. Grubun her üyesi için bir Kotlin kitabı veya başka bir çalışma materyali alın ve gruptan her hafta birkaç bölüm okumalarını isteyin. Her toplantıda, grup öğrendiklerini karşılaştırmalı ve soruları veya gözlemleri tartışmalıdır.
Eğitim kültürü oluşturun
Herkes kendini öğretmen olarak görmese de herkes öğretebilir. Teknolojiden veya ekipten bireysel katkıda bulunana kadar herkes, başarıya ulaşmasına yardımcı olabilecek bir öğrenme ortamını teşvik edebilir. Bunu kolaylaştırmanın yollarından biri de, düzenli olarak çeşitli sunumlar yapmaktır. Bu toplantılarda ekip, bir kişinin öğrendiği veya paylaşmak istediği konuları tanımlar. Gönüllülerden her hafta ekibinizin yeni bir bölüm sunmasını isteyerek çalışma grubunuzdan yararlanarak ekibinizin bu dili kullanımından memnun olmasını sağlayabilirsiniz.
Şampiyon belirleyin
Son olarak, öğrenme çabalarına öncülük edecek bir şampiyon belirleyin. Benimseme sürecine başlarken bu kişi konu uzmanı (SME) olarak çalışabilir. Bu kişiyi, Kotlin ile ilgili tüm alıştırma toplantılarınıza dahil etmek önemlidir. İdeal olarak, bu kişi Kotlin tutkusuna ve biraz çalıştırma bilgisine sahip.
Yavaş entegrasyon yapın
Yavaş bir başlangıç yapıp ekosistemde ilk önce hangi kısımların taşınacağını stratejik olarak düşünmek çok önemlidir. En iyi yöntem, bunu bir ana uygulama yerine kuruluşunuzdaki tek bir uygulamaya ayırmaktır. Seçili uygulamayı taşımak söz konusu olduğunda her durum farklı olsa da başlamanıza yardımcı olacak birkaç genel nokta aşağıda verilmiştir.
Veri modeli
Veri modeliniz, muhtemelen birçok yöntemle birlikte çok sayıda eyalet bilgisinden oluşur. Veri modelinde toString()
, equals()
ve hashcode()
gibi sık kullanılan yöntemler de bulunabilir. Bu yöntemlerin geçişi genellikle
yapılabilir ve izole olarak 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 + '\'' +
'}';
}
}
Java sınıfını, aşağıda gösterildiği gibi tek bir Kotlin satırıyla değiştirebilirsiniz:
data class Person(var firstName: String?, var lastName : String?)
Bu kodu daha sonra, mevcut test paketinizle karşılaştırarak test edebilirsiniz. Buradaki amaç, her seferinde bir modelle küçük bir işe başlayıp davranış değil, çoğunlukla durum belirten sınıflara geçiş yapmaktır. Test sırasında mutlaka test yapın.
Test verilerini taşıma
Göz önünde bulundurulması gereken diğer bir yol da mevcut testleri dönüştürüp Kotlin'de yeni testler yazmaya başlamaktır. Böylece, uygulamanızla göndermeyi planladığınız kodu yazmadan önce ekibinize rahatlıkla konuşabilirler.
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 gösterilebilir. 101} ve mevcut Java kod tabanınız tarafından kullanılır.
Örneğin, birkaç yöntemi olan bir StringUtils
sınıfınız olduğunu düşünelim:
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
}
}
Bu yöntemler daha sonra aşağıdaki örnekte gösterildiği gibi, uygulamanızın başka bir yerinde kullanılabilir:
...
String myString = ...
String fooString = StringUtils.foo(myString);
...
Kotlin uzantısı işlevlerini kullanarak, büyüyen Kotlin kod tabanınız için daha kısa ve öz bir API sunarken Java arayanlara da aynı Utils
arayüzünü sağlayabilirsiniz.
Bunu yapmak için IDE tarafından sağlanan otomatik dönüştürmeyi kullanarak bu Utils
sınıfını Kotlin'e dönüştürebilirsiniz. Örnek çıkış, aşağıdakine benzer 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
}
}
Daha sonra, sınıf veya nesne tanımını kaldırın, her bir işlev adının önüne bu işlevin uygulanacağı 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ı uygulamanızın geri kalanıyla uyumlu hale getirmek için kaynak dosyanın üst kısmına JvmName
ek açıklaması ekleyin. Örnekte gösterildiği gibi:
@file:JvmName("StringUtils")
package com.java.project
...
Son sürüm, aşağıdakine benzer olmalıdı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 birlikte 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 kullanmaya alıştıktan ve daha küçük alanları taşıdıktan sonra parçalar, aktiviteler, ViewModel
nesneleri ve iş mantığıyla alakalı diğer sınıflar gibi daha büyük bileşenlerle uğraşmaya başlayabilirsiniz.
Dikkat edilecek noktalar
Java'nın belirli bir stili gibi, Kotlin de kısalığına katkıda bulunan kendi deyimsel stiline sahip. Ancak, ekibinizin oluşturduğu Kotlin kodunun yerini yerine Java kodu olduğunu görebilirsiniz. Ekibinizin Kotlin deneyimi büyüdükçe bu durum da zaman içinde değişir. Kademeli değişimin başarının anahtarı olduğunu unutmayın.
Kotlin kodu tabanınız büyüdükçe tutarlılık sağlamak için yapabileceğiniz birkaç şey aşağıda açıklanmıştır:
Ortak kodlama standartları
Benimseme sürecinizin başlarında standart bir kodlama kuralları tanımlayın. Gerekli olduğu durumlarda Android Kotlin stil kılavuzundan ayrılabilirsiniz.
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 Kotlin iş ortağı klint'i kullanarak 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. Otomatik derleme işleminin bir parçası haline getirmek bu tutarlılığı ve standartlara uygunluğu sağlayabilir.
Birlikte çalışabilirlik
Kotlin, çoğu zaman Java ile sorunsuz bir şekilde çalışır. Ancak aşağıdakileri göz önünde bulundurun.
Boş değer atanabilirliği
Kotlin, Kotlin tarafında null mağazalar elde edilebileceğini anlamak için derlenen kodda boş değerlilik ek açıklamalarını kullanır. Ek açıklamalar sağlanmazsa Kotlin varsayılan olarak null veya null olmayan tür olarak değerlendirilebilen bir platform türüne ayarlanır. Ancak bu durum dikkatli bir şekilde ele alınmadığında çalışma zamanı NullPointerException
sorunlarına yol açabilir.
Yeni Özellikleri Kullanma
Kotlin, ortak metin kullanımını azaltmak için geliştirme hızının artırılmasına yardımcı olan birçok yeni kitaplık ve söz dizimi şekeri sağlamaktadır. Bununla birlikte, Kotlin'in standart kitaplık işlevlerini kullanırken dikkatli olun ve yöntem uygulayın. Örneğin,toplama işlevleri .eş yordamlar , veLambda seçeneğini tıklayın.
Yeni Kotlin geliştiricilerinin karşılaştığı en yaygın tuzak budur. 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 örnekte amaç, nullableFoo
null değilse foo.baz()
ve foo.zap()
işlevlerini yürütmek ve ardından bir NullPointerException
kullanmaktan kaçınmaktır. Bu kod beklenen şekilde çalışsa da aşağıdaki örnekte gösterildiği gibi, basit bir null kontrol ve akıllı yayın yöntemine kıyasla okumak daha kolaydır.
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 kapalıdır. Alt sınıf oluşturmak istediğiniz sınıf ve işlevleri açık bir şekilde açmanız gerekir. Bu davranış, besteyi devralma yerine tanıtmak için seçilen bir dil tasarımı kararıdır. Kotlin, besteyi basitleştirmeye yardımcı olması için yetki ile davranışı uygulama konusunda yerleşik desteğe sahiptir.
Bu davranış, test sırasında davranışları geçersiz kılmak için arayüz uygulaması veya devralmaya dayanan Mockito gibi sahte çerçeveler açısından sorun teşkil eder. Birim testlerinde Mockito'nun Mock Maker Inline özelliğinin kullanımını etkinleştirebilirsiniz. Bu özellik, sınıfların ve yöntemlerin sahtesi olmanıza olanak tanır. Alternatif olarak, derleme işleminin bir parçası olarak test etmek istediğiniz tüm Kotlin sınıfını ve üyelerini açmak için All-Open derleyici eklentisini kullanabilirsiniz. Bu eklentiyi kullanmanın ana avantajı, hem birim hem de kontrollü testlerle çalışmasıdır.
Daha fazla bilgi
Kotlin kullanımı hakkında 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şlamak için kaynaklar
- Kotlin öğrenen Java kullanıcıları için kaynaklar
- Java programcılarının deyimsel Kotlin öğrenip yazmasına yardımcı olan bir kaynak koleksiyonu olan Java'nın Kotlin öğrenme rotası.