Unutulmaması gereken bir şey, kodun farklı "derinliklere" sık sık okunmasıdır. Bu kod:
PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE);
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "abc");
wakeLock.acquire();
"yağsız" kolaydır. 3 ifade var. İlk önce bir ile geldik PowerManager
. Sonra bir ile geldik WakeLock
. Sonra . Bunu her satırın başlangıcına bakarak kolayca görebiliyorum; basit değişken atamaları kısmen "TypeName = ..." olarak tanımlamak ve sadece zihinsel olarak "..." üzerine bakmak çok kolaydır. Benzer şekilde, son ifade açık bir şekilde ödevin şekli değildir, ancak yalnızca iki isim içerir, bu yüzden “ana esas” hemen anlaşılır. Genellikle, sadece "bu kod ne yapar?" Diye cevaplamaya çalışıyor olsaydım, bilmem gereken tek şey bu olurdu. yüksek düzeyde.acquire
wakeLock
Burada olduğunu düşündüğüm zekice bir böceğin peşindeysem, açıkçası bunu daha ayrıntılı olarak incelemem gerekecek ve aslında "..." yi hatırlayacağım. Ancak ayrı ifade yapısı hala bir kerede bir açıklama yapmama yardımcı oluyor (özellikle her ifadede çağrılan şeylerin daha derine atlanması gerekirse işe yarar; geri döndüğümde “bir üniteyi” tamamen anladım. ve sonra bir sonraki ifadeye geçebilir).
((PowerManager)getSystemService(POWER_SERVICE))
.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakelockTag")
.acquire();
Şimdi hepsi bir açıklama. Üst düzey yapı yağsız okunması kolay değildir; OP'nin orijinal versiyonunda, herhangi bir yapıyı görsel olarak iletmek için çizgiler ve girintiler olmadan, 3 basamaklı bir dizinin kodunu çözmek için parantezleri saymam gerekecekti. Çok parçalı ifadelerin bazıları, bir yöntem çağrısı zinciri olarak düzenlenmekten ziyade, birbirlerinin içine yerleştirilmişse, o zaman yine de buna benzer bir şekilde görünebilir, bu yüzden parantezleri saymadan güvenmeye dikkat etmek zorundayım. Ve eğer girintiye güveniyorsam ve tüm bunların varsayılan noktası olarak son şeyden önce kayıyorsam, .acquire()
bana ne söyler?
Bazen de, istediğin bu olabilir. Dönüşümünüzü yarı yolda uygularsam ve şunu yazarsam:
WakeLock wakeLock =
((PowerManeger)getSystemService(POWER_SERVICE))
.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLockTage");
wakeLock.acquire();
Şimdi bu hızlı bir yağsız iletişim kurar "a WakeLock
, o acquire
zaman". İlk versiyondan bile daha basit. Hemen elde edilen şeyin bir olduğu açıktır WakeLock
. Bunu elde etmek, PowerManager
bu kodun amacına göre oldukça önemsiz olan bir alt ayrıntı ise, ancak wakeLock
önemli olan şey, o zaman gerçekten PowerManager
hızlı bir şekilde almaya çalışıyorsanız, üzerine atlamak için doğal olan şeyleri gömmek için yardımcı olabilir. bu kodun ne yaptığı hakkında fikir. Adlandırma değil , sadece bir kez kullanıldığını, bazen de bu olduğunu Önemli olan (kapsamın geri kalanı çok uzunsa, tekrar kullanılıp kullanılmayacağını söylemek için hepsini okumak zorundayım; ancak, açık alt kapsamları kullanmak, eğer diliniz destekliyorsa, bunu ele almanın başka bir yolu olabilir).
Bu, hepsinin içeriğe ve ne iletişim kurmak istediğine bağlı olduğunu gösterir. Doğal dilde nesir yazma gibi, orada her zaman bilgi içerik bakımından temelde eşdeğer olan bir kod verilmiş parça yazmak için pek çok yöntem. Genellikle gerektiğini aralarında seçim kadar doğal dilde düzyazı, yazma gibi değil gibi mekanik kurallarını uygulamak olmak "yalnızca bir kez oluştuğunda herhangi bir yerel değişken ortadan kaldırmak". Aksine nasılKodunuzu yazmayı seçerseniz, bazı şeyleri vurgulayacak ve diğerlerini de vurguluyorsunuz. Gerçekte vurgulamak istediklerinize dayanarak, bu seçimleri bilinçli bir şekilde yapmak için çaba göstermelisiniz (teknik nedenlerle daha az okunabilir kod yazma seçeneği dahil). Özellikle, sadece kodunuzun "özüne kavuşması" gereken okuyuculara neyin hizmet edeceğini bir düşünün (çeşitli seviyelerde), çünkü bu, ifadeye göre çok yakın bir ifadeden çok daha sık olur.