Yeni programlama dili Kotlin. Kotlin programlama dili

Android geliştirmenin resmi dili.

Kotlin adını neden Finlandiya Körfezi'ndeki bir adadan almıştır, dil mobil uygulama geliştiricileri arasında nasıl ve ne zaman popüler hale gelmiştir, kullanımı neden uygundur ve ilk etapta neden ihtiyaç duyulmuştur? Kotlin pazarlama müdürü Roman Belov şunları söyledi: "Kağıt", Google tarafından tanınan bir dilin St. Petersburg'da nasıl oluşturulduğu.

Roman Belov arşivinden fotoğraf

Kotlin programlama dili nasıl ve ne zaman ortaya çıktı?

Kotlin'i 2010 yılında geliştirmeye başladık. O zamana kadar JetBrains zaten on yaşındaydı ve şirketin tamamen Java ile yazılmış ana ürünü JetBrains IntelliJ IDEA zaten çok büyüktü. Java'nın birçok yönden bize uymadığı ortaya çıktı. Birkaç alternatif programlama dili vardı, ancak hiçbirinin geçiş yapmak istediğimiz dil için öne sürdüğümüz gereksinimleri karşılamadığı ortaya çıktı.

İkinci bir sebep daha vardı. Programlama dilleri konusunda oldukça fazla uzmanlığa sahip birçok insan tek bir yerde toplandığında sıklıkla yeni bir dilin doğduğu görülür. Ve böylece oldu. Birincisi, fark edilmiş ve ciddi bir ihtiyaç vardı, ikincisi de bunu karşılayabildik.

Pek çok ürünümüz gibi Kotlin'i de ihtiyaçlarımıza göre yarattık. Bu, genel olarak şirketin gelişiminin doğasında olan prensiptir: Piyasada sorunu çözecek hiçbir araç olmadığını görürüz ve sonra onu yaratırız. İlk kullanıcılarımız her zaman kendimizdir. Bu nedenle genellikle çok pratik ve pragmatik araçlarla karşılaşırız.

Kotlin neden bu şekilde adlandırılıyor?

Adın icat edildiği anda, JVM'de (Java Sanal Makinesi - yakl. "Kağıtlar") adaların adını taşıyan diller de vardı: Java, Seylan. Ve düşündük: yakınlarda hangi ada var? Kotlin. Ve bu isim kaldı. Burada bir gelenek, bir kural yok ama oldu, arkasında daha derin bir düşünce yok.

Dilin özellikleri nelerdir?

Muhtemelen Kotlin diline yakışan en iyi kelime pragmatizmdir. Farklı diller var: Bazıları akademiden geliyor, diğerleri ise belirli platformlar için yaratılıyor. Başlangıçta mümkün olan en geniş kitleye yönelik pratik bir dil hedefledik. Demokratik olması, yani anlaşılması güç şeylerin olmaması gerekiyordu. Bir programcının dilin tüm inceliklerini bildiği ve bu sayede kurnaz kod yazdığı ve genç programcıların hiçbirinin bu koda giremediği durumlar vardır. Yeni başlayanlar ve ileri düzey programcılar için eşit derecede iyi bir dile ihtiyacımız var.

Ayrıca şirket içinde tam bir demokrasiye sahibiz: her programcı hangi dilde yazacağına kendisi karar verir, Java mı yoksa Kotlin mi ve herkes Kotlin'e geçmez. Bir dil pazarlama müdürü olarak JetBrains benim için küçük bir dünya. Büyük şirketimizdeki herkes Kotlin'e geçtiğinde, muhtemelen dünyanın her yerindeki programcılar da Kotlin'e geçiş yapacaktır. Ancak aslında şirketteki Kotlin kullanım yüzdesi sürekli artıyor.

Kotlin neden bu kadar iyi? Her şeyden önce geliştiriciler Kotlin'i kısalığı ve ifade gücü nedeniyle seviyorlar. Bu, tüm yeni dillerde ortaktır. Önceden, bu insanları pek rahatsız etmiyordu, ancak daha sonra programların boyutu büyüdü - insanlar, sırf programlama dilinin sözdizimi bunu gerektirdiği için tamamen anlamsız birçok kod parçası yazdıklarını fark ettiler.

İkinci sebep ise Java ile tam uyumlu olması ve yavaş yavaş Java uygulamasından Kotlin uygulamasına geçiş yapmanıza olanak sağlamasıdır. Örneğin Basecamp uygulaması altı ay içinde tamamen Java'dan Kotlin'e geçti.

Üçüncü nokta ise Kotlin'in güvenli olmasıdır: Dilin anlambilimi, genellikle programın yürütülmesi sırasında meydana gelen bir dizi yaygın hatayı önleyen ilkeler içerir. Bu, daha güvenli kod yazmanıza olanak tanır ve sonuçta paradan tasarruf etmenize ve test maliyetlerini azaltmanıza yardımcı olur.

Kotlin uygulama geliştiricileri tarafından nasıl fark edildi?

JetBrains'te Android geliştirme yapmıyoruz ve başlangıçta hiç kimse Kotlin'in Android geliştiricilerinin amaçlarına bu kadar uygun bir dil olacağını düşünmemişti. Ancak bir noktada Android'in Java 6'da sıkışıp kaldığı ve birçok yeni Java özelliğinin Android'de bulunmadığı ortaya çıktı. Daha sonra ilerici geliştiriciler dikkatlerini Kotlin'e çevirdi.

Kotlin'in Android için çok faydalı olabileceğini fark ettik ve dilin tasarımını geliştirirken onların ihtiyaçlarını dikkate alarak Android geliştiricilerine yardımcı olacak özellikleri iyileştirmeye başladık.

Bir yıl önce oldukça büyük bir etkinliğimiz vardı: Tüm Android uygulamalarının oluşturulduğu Gradle derleme sistemi, Kotlin'e geçişi duyurdu.

Bir bakıma, Kotlin'in Android'deki hikayesi tamamen muhteşem ve ders kitabı: Biz sadece bir programlama dili yaptık ve geliştiriciler onu gerçekten beğendi. Bu, aşağıdan yukarıya doğru hareketle ilgili bir hikaye, tersi değil. Geliştiriciler uzun süredir Google'dan Kotlin'i desteklemesini istiyordu. Ve Google onları dinledi.

Google'ın duyurusuyla bizim için resmi olarak hiçbir şey değişmedi: Dili geliştirmeye devam ediyoruz ve farklı platformları hedefliyoruz. Doğal olarak, Android geliştiricilerinden dile özel ilgi göstermelerini bekliyoruz: özellikle hata mesajlarında, şu veya bu işlevsellik için destek taleplerinde ifade edilecek ve elbette tüm bunları işleyeceğiz. Ancak genel olarak elbette amaçlanan yolda ilerlemeye devam edeceğiz.

Kotlin dilini kimler ve neden kullanıyor?

Şirkette Kotlin'i 2012 yılında kullanmaya başladık ancak dilin resmi çıkışı 17 Şubat 2016'da gerçekleşti. Bu zamana kadar dil tasarımları aktif olarak değişiyordu ve Kotlin'de kodun sürdürülmesi oldukça sorunluydu. Programlama dillerinin geliştirilmesinin geriye dönük uyumluluğa büyük dikkat gerektirdiğini anlamalıyız. Sürümü duyurduğumuzda geriye dönük uyumluluk taahhüdünde bulunduk: yeni kod eski kodla ikili düzeyde uyumlu olacaktı. Ve biz bu yükümlülükleri yerine getiriyoruz.

Şu anda Avito ve Rocket Bank gibi Rus şirketleri uygulamalarında Kotlin dilini kullanıyor. Geçtiğimiz yıl 160 bin programcı Kotlin'i denedi. Kotlin şimdiye kadar programcı sayısında katlanarak büyüme gösterdi ve Google'ın duyurusunun bu büyümeyi sürdürmemize yardımcı olacağını düşünüyorum.

18.05.2017, Per, 14:39, Moskova saati , Metin: Alexander Kornev

Google geliştiricileri, Kotlin'i Android işletim sistemi için birinci sınıf bir dil haline getirdi ve bunun henüz ana "birinci sınıf" Java dilinin yerini almayacağını belirtti.

Android için birinci sınıf bir dil olarak Kotlin

Perşembe günü, yıllık Google I/O konferansında geliştiriciler, Rus programcılar tarafından oluşturulan Kotlin dilinin, Android uygulamaları yazmak için "birinci sınıf dil" olacağını duyurdu. TechCrunch'ın yazdığına göre Google, dilin yaratıcılarıyla birlikte Kotlin'in geliştirilmesi için özel bir fon olan JetBrains'i organize etmekten de bahsetti.

Google, Kotlin'in ek bir dil olacağını ve hiçbir şekilde Java ve C++'ın yerini almayacağını vurguladı (bugün Java, Android için birinci sınıf dildir). JetBrains IDE tabanlı Kotlin araçlarının, Android işletim sisteminin resmi geliştirme aracı olan Android Studio 3.0'a standart olarak dahil edilmesi planlanıyor.

Gazeteciler, "Kotlin tamamen Java tarafından desteklendiğinden, daha önce uygulamalar yazabiliyordunuz, ancak artık Google'ın otoritesi ve itibarı tarafından desteklenecek" diyor.

Google, Android'i Rusya'da oluşturulan bir dil olan Kotlin'e çeviriyor

Ancak Google, Kotlin'in sahibi olmuyor. Haklar JetBrains'e ait olmaya devam edecektir. Dil, örneğin iOS ve Mac için yerel kod olarak veya web uygulamaları için JavaScript kodunu derlemek üzere diğer platformlarla çalışmaya devam edecektir.

Swift ile rekabet halinde

Kotlin, JVM'nin üzerinde çalışan, JavaScript'e derlenen statik olarak yazılmış bir programlama dilidir. Dil 2010'dan beri geliştiriliyor, kaynak kodu 2012'de açıldı. Kotlin, adını Kronstadt'ın da bulunduğu Finlandiya Körfezi'ndeki Kotlin adasının onuruna aldı.

2016 baharında Google'ın, iPhone ve iPad için bir programlama dili olan Swift'de Android uygulamaları geliştirme olasılığını duyurduğunu hatırlayalım. Daha sonra olası bir alternatif dil olarak Kotlin seçildi. Başlangıçta Swift, Apple'ın dahili bir projesiydi ancak daha sonra kaynak kodu geliştiricilere açık hale geldi.

Java'nın yerine geçecek alternatif arayışının olası nedeninin, Google'ın telif haklarını ve patentlerini ihlal ettiğini öne süren Oracle Corporation ile yaşadığı hukuki sorunlar olabileceği bildirildi. Uzmanlar, Swift'in Android'e uyarlanmasının, mobil işletim sistemi için yeni bir çalışma ortamı geliştirmeyi, standart kitaplığı uyarlamayı, programlama arayüzlerinde (API'ler) ve geliştirici araçlarında dil desteği sağlamayı vb. gerektireceğini belirtti.

Uzmanlara göre Swift dili, daha yüksek performansıyla Kotlin'den ayrılıyor. Kotlin'in avantajları arasında daha önce bahsettiğimiz JavaScript ile tam uyumluluk da yer alıyor.

Eğlenceli ana(argümanlar: Dizi ) ( val sayılar = arrayListOf(15, -5, 11, -39) val nonNegativeNumbers = sayılar.filter ( it >= 0 ) println(nonNegativeNumbers)) ) // Çıktı: 15, 11

Yüksek dereceli işlevler, diğer işlevleri bağımsız değişken ve dönüş işlevi olarak alan işlevlerdir. Aşağıdaki örneği düşünün:

Eğlenceli alphaNum(işlev: () -> Birim) ()

Burada func argümanın adıdır ve () -> Unit işlevin türüdür. func'ın hiçbir argüman almayan ve hiçbir şey döndürmeyen bir fonksiyon olacağını söylüyoruz.

Lambda ifadeleri veya anonim işlevler, bildirilmemiş ancak ifade olarak iletilen işlevlerdir. İşte bir örnek:

Değer toplamı: (Int, Int) -> Int = ( x, y -> x + y )

İki sayıyı alan, bunları toplayan ve toplamı bir tam sayıya indirgenmiş olarak döndüren bir değişken toplamı bildiririz. Bunu çağırmak için basit bir toplam(2,2) yeterlidir.

Java ve Kotlin arasında hız karşılaştırması

Kotlin kodunun ilk derlemesi, Java'daki aynı süreçten yaklaşık %15-20 daha uzun sürer. Ancak Kotlin'in artımlı yapısı Java'nınkinden biraz daha hızlıdır. Böylece dillerin derleme hızı yaklaşık olarak eşittir.

Kotlin'in Geleceği

Kotlin, Java'nın tamamen uyumlu olduğu bir sonraki evrimidir. Bu, onu mobil ve kurumsal uygulamalar için harika bir araç haline getirir. Kotlin artık Android'in resmi dili olduğundan, onu öğrenmenin sizi işsiz bırakacağından korkmanıza gerek yok.

Popüler kaynak Reddit'in istemcisi olan basit bir mobil uygulama Keddit oluşturma sürecini açıklayan bir dizi makale, bu dili öğrenmenize yardımcı olacaktır. Size kolaylık sağlamak için tüm parçalarını aşağıdaki listede listeledik.

Aşağıdaki kütüphanelere ihtiyacınız olacak:

  • Güçlendirme 2.0;
  • RxJava;
  • Picasso;
  • Geri Dönüşümcü Görünümü;
  • Android için Kotlin uzantıları;
  • Hançer 2.

Tüm kaynaklar GitHub'da mevcuttur. Seri aşağıdaki bölümlerden oluşmaktadır.

2017'de YP'nin etrafında yeni bir heyecan vardı (Programlama dili) Kotlin ve bu arka plana karşı, Android işletim sistemine dayalı akıllı telefonlar için programların geliştirilmesindeki diğer yeniliklerden de bahsetmek istiyorum. Ancak bu benim kişisel blogum ve bir tür akademik kaynak değil ve bu nedenle, önce kendime bazı lirik ara sözlere izin vererek bakışlarımı geçmişe çevireceğim.

Tarihi gezi

Android işletim sistemini çalıştıran akıllı telefonları programlamayla ilk tanışmam 2012 yılının başında yani tam 6 yıl önce. O uzak zamanlarda Google henüz muhteşem IDE'sini yaratmamıştı. (Entegre Geliştirme Ortamı, Entegre Geliştirme Ortamı) Android Studio ve ADT eklentisi yüklü olarak Eclipse IDE'deyim (Android Geliştirme Araçları, Android Geliştirici Araçları). Tanışmamızın nedeni, ilk akıllı telefonum HTC Desire HD'yi bir yıldan kısa bir süre önce, 2011 yazının başlarında satın almamdı.

Java, Android için yerel programlama dili olarak kabul edildi. Bu benim için yeni bir dildi, bu yüzden üçlü bir zorlukla karşılaştım: yeni bir IDE, yeni bir dil ve yeni bir işletim sistemi (İşletim sistemi) ve bunların hepsi aynı anda. Yine de bir şekilde Android için program yazmayı öğrendim ve hatta memnuniyetle 1000 € ödül aldığım ticari bir ürün bile yazdım.

Ancak Android için programlama son derece zahmetliydi, hatta bunu periyodik olarak dile getiriyorum. İşte IDE'nin kusurlu olması ve standart kütüphanelerin Android yönünde az gelişmiş olması ve bunların hepsinin ayrı ayrı aksaklıkları.

Bir yıl sonra 2013 yılı başında Hatta karakteristik bir epigrafla “Android, kulaklarınla ​​hileler” adlı özel bir blog yazmaya bile başladım. Kirpi ağladı, kendilerine enjekte etti ama kaktüsü kemirmeye devam etti...", karşılaştığım belirli sorunların çözümlerini periyodik olarak yayınladığım ve sanki hafızam için bazı ek arka plan bilgileri de yayınladığım.

2014 yılında Google'ın kendi IDE'sinin ilk kararlı sürümü ortaya çıktı (gerçi Prag'da üç Rus programcı tarafından kurulan, yasal olarak Çek şirketi JetBrains'te yazılan IntelliJ IDEA IDE'ye dayanmaktadır).

Genel olarak her şey, Ağustos 1991 darbesinden hemen sonra St. Petersburg'daki Bağımsız İnsani Akademi'deki yazılım laboratuvarı temelinde faaliyetlerine başlayan ve ardından üç kişiden oluşan Rus şirketi StarSoft ile başladı. 1993 yılında Birlikte projesi üzerinde çalışmalar başladı (yazılım tasarım aracı) Fikri Almanya'dan gelen bir Alman tarafından önerildi. 1995 yılında şirketin adı STAR SPb olarak değiştirildi ve resmi olarak STAR Grubunun Rusya temsilciliği olarak tescil edildi. 1999 yılında Together ürünü üzerinde çalışan uzmanlardan oluşan “Rus-Alman” şirketi TogetherSoft, STAR SPb'den ayrıldı. Kurucu ortaklar arasında, her zaman olduğu gibi, iyi programcıların acilen St. Petersburg'dan Avrupa'ya götürülmesi gerektiğine karar veren Amerikalılar vardı ve aynı 1999'da TogetherSoft'un en iyi ekibi (Yaklaşık 50 kişi) Prag'a gitti. Bunların arasında JetBrains'in gelecekteki üç kurucusu da vardı. Ve böylece 2000 yılında JetBrains şirketini kurdular ve o dönemde yaşadıkları yer olan Prag'a kaydoldular.

JetBrains'in amiral gemisi ürünü, birçok programlama dili için bir IDE olan IntelliJ IDEA'dır. Google bunu IDE Android Studio için temel aldı. Bu arada Google'ın kurucu ortağı da Rusya'dan. Biraz araştırırsanız Rus kökleri her yerde göze çarpıyor... Moskova'da doğdu ve 5 yaşına kadar orada yaşadı, ardından ailesi 1979'da Yahudiler arasında gelenek olduğu gibi Amerika'ya göç etti. Özellikle antisemitizm nedeniyle Yahudilerin üniversitelere girmelerine yönelik kotaların varlığı. Yahudiler önce bir halk olarak kendilerini izole ediyor, Allah'ı seçmiş olduklarını her şekilde vurguluyor ve farklı hakim din ve farklı zihniyete sahip bölgelerde her zaman kabul edilemeyen zihniyetlerini gizlemezler ve sonra ortaya çıkan sonuca şaşırırlar. . Ancak bu başka bir konudur. En hafif tabirle eski vatanına karşı şüpheci tavrına rağmen (Sovyet göçmenleri tarafından yetiştirilen bir insandan başka ne bekleyebilirsiniz), özellikle internette görüşlerini tamamen paylaşıyorum. Ve Rusya ile ilgili birçok eleştirel ifade, bir yabancının ağzından duyulduğunda hoş olmasa da oldukça adil. Ancak yine dikkatim dağıldı...

Dolayısıyla, Android Studio ortaya çıktığında, Android için geliştirme konusunda potansiyel olarak daha umut verici bir IDE olarak hemen ona geçtim. İlk başta Eclipse'e kıyasla hem artılarının hem de eksilerinin farkedildiğini söylemeliyim. Yine de çok daha fazla avantajı vardı ve ben buna sıkı sıkıya bağlı kaldım.

Amatör olarak düzenli program yapmıyorum ve Android açısından son 2017'yi tamamen kaçırdım. Ve şimdi IDE'yi güncellemeye ve aradan geçen sürede orada ne gibi yeni şeylerin ortaya çıktığını görmeye karar verdim. Ve orada pek çok önemli şeyin ortaya çıktığı ortaya çıktı! Aşağıda, son derece olumlu olarak değerlendirdiğim, özellikle dikkate değer bazı yenilikleri listeleyeceğim.

Yeni programlama dili Kotlin

Yakın zamana kadar Android Studio yalnızca Java'da programlamayı destekliyordu (Java, daha önce daha çok Java diyordu. Dil, adını bir kahve markasından alıyor ve bu marka da Endonezya'daki bir adanın adını alıyor) ve yerel kod için C++'da. Java dili çok eski olmasa da kullanımının nispeten genç odak noktası göz önüne alındığında (çoklu platform), oldukça yaşlı. 1995 yılında ünlü Sun Microsystems şirketi tarafından geliştirildi. Dilin orijinal adı Meşe idi ("Meşe") ve tüketici elektronik cihazlarının programlanması için geliştirilmiştir. Daha sonra Java olarak yeniden adlandırıldı ve istemci uygulamaları ve sunucu yazılımı yazmak için kullanıldı. Daha sonra başka kullanımlar ortaya çıktı.

Java'nın, işletim sisteminde yürütülmesi için tam kod üretmeyen bir derleyiciyle birlikte çalıştığını unutmayın. Bu dilde yazılan kaynak metinler, sisteme ek olarak yüklenen özel bir sanal makinede yürütülen ve bu kodu işletim sistemi ve işlemci tarafından anlaşılabilecek komutlara çeviren özel bir bayt kodu halinde derlenir. Böylece bu dilde yazılan programlar, böyle bir sanal makinenin kurulu olduğu herhangi bir cihazda çalıştırılabilir. Ve Java sanal makineleri zaten çeşitli mimariler için yazılmıştır. Çoklu platform programlarına bu şekilde ulaşılır. Bu yaklaşımın dezavantajı, kod ile işlemci arasında sanal makine biçimindeki ek bir katman nedeniyle yürütme süresinin artmasıdır. Ayrıca, Java programları, GUI kitaplıkları gibi birçok Java kitaplığının kusurları nedeniyle genellikle daha yavaş çalışır. Ancak tüm bunlar çoklu platformun bedeli.

Ve yakın zamanda, 2017'nin sonunda, Java ve C++ dilleriyle birlikte Kotlin dilini desteklemeye başlayan Android Studio 3.0 piyasaya sürüldü. (Kotlin) Java gibi, aynı sanal makine için aynı bayt kodunu oluşturmak üzere tasarlanmış ancak çok daha kompakt kaynak kodu yazmanıza olanak tanıyan farklı bir sözdizimine sahiptir. Aynı zamanda her iki dildeki kaynak dosyalar kısıtlama olmaksızın tek bir projede karıştırılabilir, bu da tüm projenin kademeli olarak Kotlin'e aktarılmasını mümkün kılar.

Dil tamamen taze. 2010 yılında geliştirilmeye başlandı, 2011 yılında halka sunuldu, 2012 yılında Android için programlama mümkün hale geldi ve resmi sürüm oldukça yakın zamanda 2016 yılında yayınlandı. Bu arada, geleneğe göre (Java gibi) dil adanın adını almıştır. Bu kez Finlandiya Körfezi'ndeki, Kronstadt şehrinin de bulunduğu Rusya'nın Kotlin adası var. Ve dil, hepsi aynı JetBrains şirketindeki St. Petersburg programcıları tarafından geliştirildi! Ah, nasıl, gerçek bir Rus programlama dili! [Vatanseverler bayrak sallamalı ve bu yazının yazarı zaten odanın etrafında daireler çizerek, asayı tehditkar bir şekilde sallıyor...]

Zaten Android için bu dilde yazmayı denedim ve dilin oldukça uygun olduğunu rahatlıkla söyleyebilirim. Daha önceleri Java kodunda kaybolmuştum çünkü Android'de her şeyi ve herkesi yazmak zorundaydınız ve sonuçta çok uzun kaynak kod sayfalarıyla karşılaşıyordunuz. Sonuç olarak, kaynak kodu müstehcen boyutlara ulaştı ve bunların ince bir şekilde sınıflara bölünmesi, farklı dosyalara doldurulması gerekiyordu ve sonra zaten dosyalar arasında kaybolmuştum. Kotlin, "otomatik olarak oluşturulabilecek her şeyin otomatik olarak oluşturulması gerektiği" felsefesini kullanıyor. Bir yandan kod daha az şeffaf hale geliyor (eksi, ancak belki yalnızca yeni başlayanlar için), ancak daha basit ve daha kompakt (herkes için büyük bir artı).

Kodun kompaktlığı yalnızca kısaltılmış sözdizimi yapıları nedeniyle değil, aynı zamanda kullanım yöntemi kompaktlık ve ergonomik kullanım için özel olarak uyarlanmış standart kütüphaneler sayesinde de elde edilir. Buna bir örnek eşyordamlar olabilir (veya İngilizce'den bir aydınger kağıdı olarak eşyordamlar). Eşyordamlar, ana iş parçacığı tarafından eşzamansız olarak yürütülmesi gereken kodu biçimlendirmenin çok açık ve kompakt bir yoludur. Ayrı ayrı yöntemlerle ek sınıflar yazmaya gerek yok; her şey ana kodda doğru şekilde yapılıyor ve bu harika! Ayrıca eşyordamlar kitaplığın kendi düzeyinde uygulanır ve ağır sistem iş parçacıkları oluşturmaz. Hatta bunlara hafif iplikler de denir. Bu nedenle, aynı anda başlatılanların sayısı konusunda neredeyse hiçbir kısıtlama yoktur. Coroutine'ler inanılmaz!

Google'dan Android için Mimari Bileşenler

Ayrıca, iyi bilinen SQLiteOpenHelper sınıfı üzerinde bir sarmalayıcı olan Room kütüphanesini kullanarak bir SQLite veritabanı oluşturmanın ve kullanmanın da oldukça kompakt olduğu ortaya çıktı. Room'u kullanmak için tabloyu ve veritabanını tanımlayan iki küçük sınıfı ve bu veritabanıyla etkileşime yönelik işlevleri açıklayan küçük bir arayüzü tanımlamak yeterlidir. Kotlin'de tüm bunları farklı dosyalara koymaya gerek yok. Bu yetersiz bilgiye dayanarak Room, daha önce büyük dosyalara yazılması gereken tüm eylemleri otomatik olarak ve dahili olarak yeniden üretecektir. Mucizeler!

Gerçek uygulamalarda veritabanındaki verilerdeki değişiklikleri takip etmeniz ve görsel bileşenlerdeki bilgileri otomatik olarak güncellemeniz gerekir. Bu nedenle, Oda bileşeni çoğunlukla tek başına değil, android.arch.lifecycle kitaplığındaki LiveData bileşeniyle birlikte kullanılır. Bu bileşenin kullanımı da kolaydır. Takip edilmesi gereken veriler veritabanından değişkene doğrudan değil, bu verileri Room içerisinde parametre olarak alan LiveData sınıfı biçiminde aktarılır. Bundan sonra ana kodda Kotlin'in bir satırı bunların izlenmesini ve veriler değiştiğinde başlatılan görsel bileşenin güncelleme işlevini ayarlar. Her şey basit!

Android.arch.lifecycle kütüphanesindeki, ekranı döndürürken etkinlik verilerini kaydetme sorununu çözen bir diğer yararlı bileşen ViewModel'dir. Önceden, verilerin kaybolmaması ve hesaplamaların kesintiye uğramaması için her türlü ustaca koltuk değneği yazmak gerekiyordu. Artık bunun için resmi bir bileşen var! Daha önce arayüzü koddan ayırmış olsaydık (işaretleme ve etkinlik)öyleyse şimdi yalnızca etkinliğin yaşam döngüsü boyunca çalışması gereken kodu ayırmanın zamanı geldi (örneğin kullanıcı arayüzünün çalışmasının sağlanması), belirli bir etkinlik yaşam döngüsünün dışında çalışması gereken koddan (örneğin, verilerin alınması, işlenmesi ve iletilmesi). Bu durumda ekranı döndürdükten sonra yeniden oluşturulan aktivitede kodun ikinci kısmının sonucunu otomatik olarak okuyabiliyoruz.

Bu planın tamamını ViewModel ile uygulamak için minimum düzeyde eylem de gereklidir. Kesintiye uğramaması gereken kodla ayrı bir sınıf yazılır (sözde görünüm modeli, neden “model” olduğunu bilmiyorum; belki yanlış çeviriyorum) ve ana kodda, bu sınıfın parametre olarak iletildiği model sağlayıcı bir satırda çağrılır. Sağlayıcı ya mevcut bir model sınıfı nesnesini döndürür (ekranı döndürdükten sonra) veya henüz mevcut değilse iletilen sınıfı kullanarak böyle bir nesne oluşturur ve onu döndürür (etkinlik ilk kez başlatıldığında). Bir aktivite her zaman bu nesnenin fonksiyonlarına ve değişkenlerine erişebilir.

Her üç bileşen de Android Mimari Bileşenleri resmi adı altında birleştirilmiştir. Doğru, aynı zamanda android.arch.lifecycle kütüphanesinde bulunan LifeCycle bileşenini de içeriyor, ancak LiveData ile yakın bağlantılı olarak kullanılıyor ve onu hiç vurgulamayacağım. Bu tür üst düzey bileşenlerin kullanıma sunulması, Google için doğru yönde atılmış hoş bir adımdır. Yeni başlayanların ders kitaplarındaki ilkel örneklerden biraz daha fazlasını yapmak için kendinizi kaç farklı sınıfa genişletmeniz ve hepsini birbirine bağlamanız gerektiğinden uzun zamandır şikayet ediyorum. Ve nihayet kütüphaneler arasında doğru bileşenler ortaya çıkmaya başladı. Umarım bu trend devam eder.

Görsel arayüz editörü

Akıllı telefon programlamada keşfettiğim yenilikler bununla bitmiyor. Android Studio, Eclipse'e göre daha kararlı olmasına rağmen, doğuşundan itibaren görsel arayüz düzenleyicisinin kararlılığı ve öngörülebilirliği konusunda çok zor zamanlar geçirdi. Arayüzün xml işaretlemesini doğrudan düzenlemek bile, tüm bu Düzenleri ve diğer görsel bileşenleri, doğru yerlerde ve doğru biçimde görüntülenecek şekilde yapılandırmak çok zordu.

Neyse ki, Android Studio'da, 2.2 sürümünden başlayarak, öğelerin doğrusal bir düzenlemesi yoluyla bir gimor arayüzü oluşturmak yerine (Doğrusal Düzen) yeni zorunlu düzenin kullanılması önerildi (Kısıtlama Düzeni). Ayrıca görsel editör nihayet tamamlandı. Bütün bunlar birlikte çok olumlu bir etki yarattı. Artık öğeleri doğru bir şekilde konumlandırmak o kadar da zor değil ve oldukça tahmin edilebilir şekilde davranıyorlar. Artık xml işaretlemesine bile dokunamıyorsunuz, ancak tüm eylemleri görsel düzenleyicide gerçekleştirebiliyorsunuz.

Bu makale Kotlin programlama dilinden bahsediyor. Projenin ortaya çıkma nedenlerini, dilin yeteneklerini öğrenecek ve çeşitli örnekler göreceksiniz. Makale öncelikle okuyucunun java programlama diline aşina olması beklentisiyle yazılmıştır ancak başka bir dil bilenlerin de konu hakkında fikir sahibi olması beklenmektedir. Makale yüzeyseldir ve javascript'te derlemeyle ilgili sorunlara değinmemektedir. Belgelerin tamamını projenin resmi web sitesinde bulabilirsiniz, ancak ben kısaca dilden bahsetmeye çalışacağım.

proje hakkında

Kısa bir süre önce geliştirme ortamları yaratan JetBrains, yeni ürünü Kotlin programlama dilini duyurdu. Şirkete bir eleştiri dalgası geldi: Eleştirmenler, şirketin kendi dilini geliştirmek yerine aklını başına toplayıp Scala eklentisini tamamlamasını önerdi. Scala geliştiricileri gerçekten iyi bir geliştirme ortamına sahip değiller, ancak eklenti geliştiricilerinin sorunları anlaşılabilir: İsviçreli araştırmacılar sayesinde doğan Scala, iyi bir geliştirme aracı oluşturmayı son derece zor bir görev haline getiren birçok yenilikçi bilimsel kavram ve yaklaşımı bünyesinde barındırdı. . Şu anda, JVM için modern statik olarak yazılan dillerin segmenti küçüktür, bu nedenle kendi dilinizi ve bunun için bir geliştirme ortamı oluşturma kararı çok ileri görüşlü görünüyor. Bu dil toplulukta hiç kök salmasa bile JetBrains bunu öncelikle kendi ihtiyaçları için yapar. Herhangi bir Java programcısı bu ihtiyaçları anlayabilir: Bir dil olarak Java çok yavaş gelişiyor, dilde yeni özellikler görünmüyor (zaten birkaç yıldır birinci dereceden işlevleri bekliyorduk), dilin eski sürümleriyle uyumluluk onu daha da kolaylaştırıyor. yakın gelecekte pek çok yararlı şeyin ortaya çıkması imkansızdır (örneğin, düzgün tip parametrelendirmesi). Yazılım geliştiren bir şirket için programlama dili ana çalışma aracıdır, bu nedenle dilin verimliliği ve basitliği, yalnızca bunun için araç geliştirme kolaylığının değil, aynı zamanda programcının kodlama maliyetlerinin, yani ne kadar kolay olacağının da bağlı olduğu göstergelerdir. bu kodu korumak ve anlamaktır.

Dil hakkında

Dil statik olarak yazılmıştır. Ancak Java ile karşılaştırıldığında Kotlin derleyicisi, türe referansın null içerip içermediğine ilişkin bilgi ekler, bu da tür kontrolünü sıkılaştırır ve yürütmeyi daha güvenli hale getirir:

Fun foo(text:String) ( println(text.toLowerCase()) // NPE? Hayır! ) val str:String? = null // Dizge? -- null yapılabilir tür foo(str) //<- компилятор не пропустит такой вызов -- // тип str должен быть String, чтобы // передать его в foo

Bu yaklaşımın programcıyı NPE ile ilgili bir dizi sorundan kurtarabilmesine rağmen, bir Java programcısı için ilk başta gereksiz görünüyor - gereksiz kontroller veya dönüşümler yapmanız gerekiyor. Ancak bir süre kotlin'de programlama yaptıktan sonra Java'ya döndüğünüzde, tür hakkında bu bilgilerin eksik olduğunu hissediyorsunuz ve Nullable/NotNull ek açıklamalarını kullanmayı düşünüyorsunuz. Bununla ilgili olarak Java ile geriye dönük uyumluluk sorunları vardır - bu bilgi Java bayt kodunda değildir, ancak bildiğim kadarıyla bu sorun hala çözülme sürecindedir ve şimdilik Java'dan gelen tüm türler geçersizdir.

Bu arada, geriye dönük uyumluluk hakkında: Kotlin, JVM bayt kodunda derlenmiştir (dilin yaratıcıları uyumluluğu korumak için çok çaba harcarlar), bu da onun Java ile aynı projede kullanılmasına ve Java'yı karşılıklı olarak kullanma yeteneğine olanak tanır. ve Kotlin sınıfları, Kotlin'i mevcut büyük ve çok minimal bir Java projesine dahil etme eşiğini oluşturur. Bu bakımdan tamamen kotlin'de bir proje oluşturarak birden fazla Java geliştirmesini kullanabilme yeteneği önemlidir. Mesela spring-webmvc'e dayalı küçük bir proje yapmak benim için neredeyse kolaydı.

Denetleyici parçasına bakalım:

Path(array("/notes/")) denetleyici sınıfı NotesController ( özel otomatik kablolu val NotesService: NotesService? = null path(array("all")) fun all() = render("notes/notes") ( addObject(" notlar", notlarHizmet!!.tümü)) ) //... )

Kotlin'de ek açıklama kullanmanın özellikleri görülebilir: bazı yerlerde Java'daki kadar düzgün görünmüyor (bu, örneğin bir öğenin dizisi gibi özel durumlar için geçerlidir), ancak ek açıklamalar "ev yapımı" anahtar kelimeler olarak kullanılabilir. otomatik kablolu veya denetleyici olarak (içe aktarırken bir takma ad türü belirtirseniz) ve yetenekler açısından ek açıklamalar gerçek sınıflara daha yakındır.

Spring'in işlemleri yönetmek için Kotlin sınıflarını tamamlayamadığı unutulmamalıdır - bunun gelecekte mümkün olacağını umuyorum.

Dil birinci sınıf işlevleri desteklemektedir. Bu, bir işlevin, özel bir sözdiziminin bulunduğu dilde yerleşik bir tür olduğu anlamına gelir. Fonksiyonlar yerel olarak oluşturulabilir, diğer fonksiyonlara parametre olarak iletilebilir ve bunlara yapılan referanslar saklanabilir:

Fun doSomething(thing:()->Unit) ( // function türünde bir parametre bildirin // ()->Unit hiçbir şeyi kabul etmez ve // ​​önemli bir şey döndürmez() // çağrı ) doSomething() ( // ve burada anında // ()->Unit türünde bir fonksiyon yaratırız ve bunu doShomething fonksiyonuna iletiriz // eğer fonksiyon son parametreyse, // onu çağrı parantezlerinin dışına taşıyabilirsiniz println("Merhaba dünya "))

Bu uzantıya, zaten var olan bir sınıfı, sınıfın kapsüllenmesini ihlal etmeyen, ancak bu sınıfın yöntemleri olarak erişilebilen bir yöntem kullanarak genişletmemize izin veren işlevleri eklersek, o zaman oldukça güçlü bir genişletme mekanizması elde ederiz. kolaylık açısından oldukça zayıf olan standart Java kütüphaneleri. Geleneğe göre, standart kitaplıkta zaten mevcut olan listeyi filtreleme özelliğini ekleyelim:

Eğlence Liste .filter(koşul:(T)->Boolean):Liste ( val sonuç = liste () for(item in this) ( if(condition(item)) result.add(item)) ) return result ) val someList = list(1, 2, 3, 4).filter ( it > 2 ) // someList= =

Lütfen değişkenlerin türlerinin belirtilmediğini unutmayın; mümkünse Kotlin derleyicisi bunları çıkarır ve arayüzün anlaşılırlığını etkilemez. Genel olarak dil, klavye başındaki kişiyi mümkün olduğunca gereksiz karakter yazmaktan kurtaracak şekilde tasarlanmıştır: minimum anahtar kelimeyle kısa ama net sözdizimi, ifadeleri ayırmak için noktalı virgüllere gerek yok, uygun olduğunda tür çıkarımı , sınıf oluşturmak için yeni anahtar kelime yok - yalnızca gerekli olan şey.

Sınıflar ve kısalık konusunu açıklamak için aşağıdaki koda bakalım:

// fasulye sınıfları oluşturmak // kısa ve öz hale gelir, alanlar doğrudan yapıcı bildiriminde bildirilebilir // class TimeLord(val name:String) // sınıfın hiç gövdesi olmayabilir class TARDIS(val sahibi:TimeLord) fun main (argümanlar: Dizi ) ( val doktor = TimeLord("Doktor") val tardis = TARDIS(doktor) println(tardis.owner.name)) )

Birkaç satırda iki sınıf bildirebildik, iki nesne oluşturabildik ve TARDIS sahibinin adını yazdırabildik! Sınıfın, mümkün olan tek kurucusunun parametreleriyle bildirildiğini fark edebilirsiniz; bunlar aynı zamanda özelliklerinin de bildirimidir. Son derece kısa ama bilgilendirici. Elbette birden fazla kurucu bildirmenin imkansızlığını kınayanlar olacaktır, ancak bana öyle geliyor ki bunun kendi pragmatizmi var - sonuçta, Java'daki birçok kurucu, Kotlin'in dilde desteklediği varsayılan parametreleri bildirmenize izin veriyor. seviye veya bu sınıfın çalışacağı bir türü diğerine dönüştürün ve bu zaten güvenli bir şekilde fabrika yöntemine bırakılabilir. “Değişkenler” ve alanların bildirimine dikkat edin. Kotlin bizi bir seçim yapmaya zorluyor: val veya var. Val'in değişmez bir son referans bildirdiği ve var'ın bir değişken bildirdiği durumlarda, değişken referansların yaygın kullanımının önlenmesine yardımcı olur.

Örnek

Artık daha ilginç şeyler yapabileceğimiz yere ulaştık. Görüşmeler sırasında sıklıkla bir ağacı uygulama, onu geçme ve bir öğeyle bazı eylemler belirleme görevini veriyorum. Bunun kotlin'de nasıl uygulandığını görelim.

Kullanımın şöyle görünmesini istiyorum:

Eğlenceli ana(argümanlar: Dizi ) ( // küçük bir ağaç yarat val ağaç= ağaç("kök") ( düğüm("1-1") ( düğüm("2-1") düğüm("2-2") ) düğüm("1-2) " ) ( node("2-3") ) ) // onu çaprazlayın ve değerleri konsola yazdırıntree.traverse ( println(it)) )

Şimdi bunu uygulamaya çalışalım. Bir ağaç düğümü sınıfı oluşturalım:

/** * @param değeri düğüm verileri */ sınıf Düğüm (val değeri:T) ( // düğüm çocukları özel val çocukları:Liste > = arrayList() /** * Bir düğüme alt öğe oluşturan ve ona ekleyen yöntem * @param value yeni düğümün değeri * @param init yeni düğümü başlatmak için işlev, isteğe bağlı * parametre */ fun node(value: T, başlangıç:Düğüm .()->Birim = ())):Düğüm (val düğümü = Düğüm (value) node.init() kids.add(node) return node ) /** * Yöntem, * düğümün kendisinden başlayarak tüm alt düğümleri yinelemeli olarak geçer, her düğüme bir işleyici * @param işleyicisi işlev işleyicisi bildirilir. her düğümün değeri */ fun traverse(handler:(T)->Unit) ( handler(value) kids.forEach ( child -> child.traverse(handler)) ) )

Şimdi ağacın tepesini oluşturacak bir fonksiyon ekleyelim:

/** * Değer değerine sahip bir ağaç düğümü oluşturur ve onun alt öğelerini init yöntemiyle başlatır *. */ eğlence ağaç(değer:T, başlangıç:Düğüm .()->Birim): Düğüm ( val node = Node(value) // düğüm nesnesindeki // parametresinde iletilen init yöntemini çağırın node.init() dönüş düğümü )

Kodun iki yerinde Node.()->Unit gibi bir yapı kullanıldı; bunun anlamı, Node.js türündeki bir nesnenin yöntemi olarak yürütülecek olan bir işlev türünün giriş olarak beklenmesidir. Bu işlevin gövdesinden, örnekte açıklanana benzer ağaç başlatma işlemi yapmanıza olanak tanıyan Node.node() yöntemi gibi bu nesnenin diğer yöntemlerine erişim vardır.

Bir sonuç yerine

Java ile iyi uyumluluğu ve eski kodu kademeli olarak değiştirme yeteneği nedeniyle Kotlin, gelecekte büyük projelerde Java'nın yerine iyi bir alternatif olabilir ve gelişme olasılığı olan küçük projeler oluşturmak için uygun bir araç olabilir. Dilin basitliği ve esnekliği, geliştiriciye hızlı ama kaliteli kod yazma konusunda daha fazla fırsat verir.

Dille ilgileniyorsanız, dille ilgili tüm bilgileri projenin resmi web sitesinde bulabilirsiniz, kaynakları github'da bulunabilir ve bulunan hatalar Sorun Takipçisinde yayınlanabilir. Hâlâ birçok sorun var ancak dil geliştiricileri aktif olarak bunlarla mücadele ediyor. Ekip şu anda kilometre taşı 3'ün henüz çok kararlı olmayan sürümü üzerinde çalışıyor, stabilizasyondan sonra bildiğim kadarıyla dilin JetBrains şirketi bünyesinde kullanılması planlanıyor ve ardından ilk sürüm zaten planlanıyor.

Etiketler:

  • kotlin
  • java
  • jet beyinliler
Etiket ekle