Daha Az Kod Yazarak Daha Fazla Kod Üret: Live Template Kullanımı

Arif Acar
5 min readDec 24, 2020

--

Kullandığınız IDE’nin sunduğu kolaylıklara ne kadar hakimseniz verimliliğiniz de o ölçüde artıyor. Karşılaştığınız bir problemi ya da yapılacak işi kafanızda kurguladıysanız ve artık onu sadece koda dökmek kaldıysa kimi zaman bunu yapmak yazılımcılar için külfet haline gelebiliyor. Her ne kadar kaliteli bir kod yazma sürecinde birbirini tekrarlamamasını sağlayacak sınıflar, metodlar ya da kod blokları yazmaya özen göstersekte kaçınılmaz olan durumlar oluşabiliyor. Çoğu yazılımcı kopyala/yapıştır yönetime başvursa da bunun çok fazla hataya açık bir konu olduğunu söyleyebilirim. Onun yerine IDE’lerin sunduğu şablonlarını kullanmak çok daha sağlıklı olacaktır.

Bu şablonlar Eclipse kullananlar için Template , VS Code kullananlar için Snippets ve Visual Studio kullananlar için yine Template olarak adlandırılmakta. Mobil geliştiriciler için de; Android Studio’da anlatacağım Idea ile yine Live Template olarak adlandırılırken XCode için de buraya göz atabilirsiniz.

Live Template nedir nasıl kullanılır bunları JetBrains’in Intellij İdea IDE’si üzerinden anlatacağım.

Nedir Bu Live Template?

Live Template, IntelliJ IDE ürünü içerisinde gömülü gelen, geliştirme yaparken birbirini tekrarlayan kod parçacıklarını otomatize etmenizi sağlayan akıllı kod yapılarıdır. Çoğu zaman biz Java’cılar sout, psvm gibi gibi basit templateler kullansakta, buranın yönetilebilir ve geliştirilebilir bir özellik olduğunun farkına varamayabiliyoruz. Verimliliğinizi arttıracak ve kod yazma alışkanlıklarınızı değiştirebilecek birkaç şablon hazırladım sizler için. Burada amaç benim sunduğum şablonları direkt alıp kullanmak değil, kendi şablonlarınızı da oluşturabileceğinizi verimliliğinizi arttırabileceğinizi göstermek.

sout ve psvm kullanımı

Öneriler Neye Göre Geliyor?

“Context awareness” türkçeye çevirdiğimizde “bağlam farkındalığı” sayesinde her şablon her yerde önerilmiyor. Bir sınıfın içi ya da bir metodun içinde farklı şablonlar önerilmektedir. Örneğin fori ile size kolay bir şekilde for döngüsü oluşturmanızı sağlayan şablon sadece metod içerisinde önerilirken direkt class içinde önerilmemektedir. macOS’ta ⌘J veya Windows / Linux’ta CTRL+J kısayol tuşları ile o anda hangi şablonları kullanabileceğinizi görebilirsiniz.

Command+J ve Context Awareness

Yeni Bir Live Template Ekleme

Preferences > Editor > Live Templates veya Command + Shift + A kısayolu ile açılan ekrandan “Live Templates” yazarak editör içindeki arama özelliğini kullanarak da buraya erişebilirsiniz.

Gelen listenin sağıdaki “+” ve “-” düğmesini kullanarak yeni bir şablon veya şablon grubu oluşturabilirsiniz. Önce bir şablon grubu oluşturun, o şablonun altında yeni bir şablon oluşturun. Oluşturduğunuz şablona uygun bir kısaltma verin. Daha sonra verdiğiniz kısaltmanın ne anlama geldiğini görebilmek için de bir açıklama ekleyebilirsiniz. Oluşturduğunuz şablonun hangi programlama dili için önerilmesi gerektiğini de seçtikten sonra Apply butonuna tıklayarak ilk şablonunuzu oluşturmuş olacaksınız.

yeni bir şablon ekleme

Şablonların içerisinde $ işareti ile bir takım değişkenler tanımlayabilirsiniz. Tanımladığınız bu değişkenlerin otomatik olarak doldurulup doldurulmayacağını ve nasıl doldurulacağını kendiniz tanımlayabiliyorsunuz. “Edit variables” butonuna tıklayarak şablonunuz için oluşturduğunuz tüm değişkenlerin listesini göreceksiniz.

Bu listede sıralama önemlidir çünkü hangi sırayla şablonu doldurmak istiyorsanız değişkenler o sıraya göre listelenmelidir. Sol alttaki ok işaretleriyle sıralamayı değiştirebilirsiniz.

Template Variables

Template Variables Ne Ola Ki?

Yukarıdaki görselde de görüleceği üzere buraya eklediğimiz değişkenlerin bir takım özellikleri var.

Name: Şablon içerisinde kullandığınız değişkenin adı. Değişkeniniz şablon içerisinde tekrarlansa bile sadece 1 kere listelenir.

Expression: Değişkenlerinize uygulayabileceğiniz bir takım değerler. Örneğin biz className diyerek o anda sınıfımızın adı neyse onu yazdırmak istedik. Benim en sık kullandıklarım: className, methodName, camelCase, date, time gibi özellikler. Diğer expression’lar için buraya bakabilirsiniz.

Default value: Varsayılan olarak belirlenen ve daha sonra kullanıcı tarafından düzenlenebilen bir değerler. Bu arada default value kısmına diğer değişkenleri de direkt yazabilirsiniz🙂

Skip if defined: Eğer değer daha önce default value seçeneği ile tanımlanmışsa, tekrar tekrar ne yazacağım diye sorma direkt atla anlamına geliyor.

Bir Örnek Yapalım mı?

Hali hazırda default olarak gelen şablonları detaylıca incelemenizi öneririm. Hem nasıl yapıldıklarını görürsünüz hem de sık kullanmayı planlayacağınız başka şablonlar da keşfedebilirsiniz.

Birlikte Log4J2 için güzel bir template oluşturalım. Öncelikle java projenizin pom dosyasına dependency eklemeyi unutmayın.

Şimdilik sadece info için bir template oluşturacağım, trace, debug, error, fatal gibi diğer metodları kendiniz implemente edip aynı mantıkla şablonlarınızı oluşturabilirsiniz.

@Service
public class LogUtil {

private static final Logger logger = LogManager.getLogger(LogUtil.class);

public <T> void info(Class<T> className, String methodName, String log) {
logger.info(className.getName() + " > " + methodName + " > " + log);
}

// TODO: will be implemented
}

Loglama için ayrı bir Util sınıfı oluşturdum. Bu loglama mekanizması projenizin belki yüzlerce yerinde kullanılacak. Bir gün olur da başka bir kütüphaneye geçerseniz tek bir sınıfı düzeltmeniz yeterli olsun diye.

LogUtil sınıfını autowired ediyoruz ve ismine de logUtil dedim. Sonra gelelim bir template oluşturmaya. Ben template’in ismini loginfo olsun istedim.

logUtil.info($CLASS$.class, "$METHOD$", "$ENTITY$ retrieved");

loginfo ismindeki template’i yukarıdaki gibi direkt koymanız halinde tek tek elle yeniden yazmanız gerekecek. Bunun için bu değişkenlere bazı expression’lar da tanımlayacağız.

CLASS -> className(), METHOD ->methodName() ve ENTITY -> variableOfType("methodReturnType()") şeklinde uyguluyoruz.

Yukarıda variableOfType için çift tırnak önerilmiyordu ama bu şekilde yazmak sorunumu çözdü.

Veee Sonuç;

Peki hazır şablonları nasıl import/export edeceğiz?

Şablonların içeri alınmasının ya da dışarı çıkarılmasının çokça yöntemi var. En kolayı şablonları kopyala/yapıştır ile içeri almak ya da bir yere aktarmak. Hazırladığınız şablonları seçip koplaya dediğinizde XML formatında tüm şablonları kopyalamış olursunuz. Aynı şekilde hazırlanmış şablonların XML formatındaki halini live template’lerde oluşturduğunuz bir grubun içine yapıştırdığınızda tüm şablonlar eklenmiş olacaktır.

Ayrıca;

Sizler için küçük bir uygulama videosu çektim. Live Template kullanarak birkaç şablon oluşturdum ve bununla bir API servisi yazdım. Spring Boot uygulaması ile JPA, Spring Web ve Lombok kullanarak çok kısa bir zamanda nasıl bir uygulamayı oluşturabileceğinizi anlatmaya çalıştım. Umarım faydalı olmuştur🙂

Sonuç

Bu şablonları en etkin kullanmanın yolu bu özelliğin var olduğunu bilip kodunuz içinde tekrarlanan satırları belirlenmeniz. Kod yazma alışkanlığınızda ciddi bir değişime sebep olabileceğini düşünüyorum.

Kullandığım IDE ne olursa olsun, IDE’nin size sunduğu kolaylıkları araştırmanızı öneririm. Yeni versiyonları çıktıkça da daha yeni neler sunuluyor birkaç dakikanızı ayırıp size ne gibi kolaylıklar sağlıyor bakmanızda fayda var.

Git hesabımdan bir Spring Boot uygulamasını kolayca geliştirebileceğiniz live template’leri paylaştım: https://github.com/arifacar/idea-live-templates

Bu serinin bir sonraki yazısında görüşmek üzere, Have a good coding day! :)

--

--