paint-brush
Kodunuzun Kokmuş Kısımlarını Nasıl Bulabilirsiniz [Bölüm XXXII]ile@mcsee
809 okumalar
809 okumalar

Kodunuzun Kokmuş Kısımlarını Nasıl Bulabilirsiniz [Bölüm XXXII]

ile Maximiliano Contieri9m2023/03/08
Read on Terminal Reader
Read this story w/o Javascript

Çok uzun; Okumak

Kokuyor çünkü düzenlenebileceği veya iyileştirilebileceği birçok durum var. Bu kokuların çoğu, yanlış olabilecek bir şeyin ipuçlarıdır. Bu nedenle bunların kendiliğinden düzeltilmesi gerekmez… (Yine de incelemelisiniz.) Önceki Kod Kokuları Önceki tüm kod kokularını (Bölüm i - XXXI) burada bulabilirsiniz.
featured image - Kodunuzun Kokmuş Kısımlarını Nasıl Bulabilirsiniz [Bölüm XXXII]
Maximiliano Contieri HackerNoon profile picture

Kokuyor çünkü düzenlenebileceği veya iyileştirilebileceği birçok durum var.


Bu kokuların çoğu, yanlış olabilecek bir şeyin ipuçlarıdır. Dolayısıyla bunların kendiliğinden düzeltilmesi gerekmez… (Yine de araştırmalısınız.)

Önceki Kod Kokuyor

Önceki tüm kod kokularını (Bölüm i - XXXI) burada bulabilirsiniz.


Devam edelim...


Code Smell 156 - Örtülü Başka

İlk programlama günümüzde if/else öğreniyoruz. Sonra diğerini unutuyoruz.


TL;DR: Açık olun. Else'le bile.

Sorunlar

Çözümler

  1. Açıkça başkasını yazın

Bağlam

Eğer bir IF cümlesine erken dönersek, else kısmını atlayabiliriz.


Daha sonra IF'yi kaldırıyoruz ve polimorfizmi kullanıyoruz.


İşte o zaman gerçek vakaları kaçırıyoruz.

Basit kod

Yanlış

 function carBrandImplicit(model) { if (model === 'A4') { return 'audi'; } return 'Mercedes-Benz'; }

Sağ

 function carBrandExplicit(model) { if (model === 'A4') { return 'audi'; } if (model === 'AMG') { return 'Mercedes-Benz'; } // Fail Fast throw new Exception('Model not found); }

Tespit etme

  • [x] Otomatik


Sözdizimi ağaçlarını kontrol edip ayrıştırabilir ve eksik kalanlar için uyarı verebiliriz.


Ayrıca bunları yeniden yazıp mutasyon testi de yapabiliriz.

Etiketler

  • Şartlılar

Çözüm

Bu tür bir koku kamuoyunda pek çok tartışmayı ve nefreti beraberinde getirir.


Fikir alışverişinde bulunmalı ve her artıya ve eksiye değer vermeliyiz.

İlişkiler

Code Smell 102 - Ok Kodu

Code Smell 36 - Switch/case/else if/else/if ifadeleri

Daha fazla bilgi

Örtülü Başka Kullanmayı Durdurun

Örtülü Başka Ne Zaman Kullanılır?

Hızlı Başarısız Olun

Sinir bozucu IF'lerden Sonsuza Kadar Nasıl Kurtuluruz

Kredi

Unsplash'ta Elena Mozhvilo'nun fotoğrafı


Yazılım ekiplerindeki en büyük sorun, herkesin diğerlerinin ne yaptığını anladığından emin olmaktır.


Martin Fowler


Kod Kokusu 157 - Denge 0'da

Bugün cüzdanımda bir ödeme bekliyordum. Bakiye 0'dı. Panikledim.


TL;DR: Boş, 0 değil. Hata 0 değil. Yalnızca 0, 0'dır.

Sorunlar

Çözümler

  1. Sıfır ile hata arasında net bir ayrım yapın.

Bağlam

Güvenlik sorunları hakkında çok şey okudum.


Özellikle kripto konusunda.


Geçen hafta bir kripto hack konusu okudum.


Cüzdanım bakiye olarak 0'ı gösterdiğinde paniğe kapıldım.


Bu sadece bir UX kokusuydu.


Blockchain'e ulaşılamıyordu 💩

Basit kod

Yanlış

 """ Below code is automatically generated by code-davinci-002 on GTP3 Codex 1. check balance with blockchain 2. If blockchain is unreachable show 0 as the balance """ import requests import json def get_balance(address): url = "https://blockchain.info/q/addressbalance/" + address response = requests.get(url) if response.status_code == 200: return response.text else: return 0

Sağ

 """ Below code is automatically generated by code-davinci-002 on GTP3 Codex 1. check balance with blockchain 2. If blockchain is unreachable throw an error """ import requests import json def get_balance(address): url = "https://blockchain.info/q/addressbalance/" + address response = requests.get(url) if response.status_code == 200: return response.text else: raise BlockchainNotReachableError("Error reaching blockchain")

Tespit etme

  • [x] Manuel


Bu bir tasarım kokusu.


Bir istisna veya dönüş kodu atıldığında ve 0 ile maskelendiğinde kalıpları bulabiliriz.

Etiketler

  • kullanıcı deneyimi

Çözüm

Daima En Az Şaşkınlık prensibini bir rehber olarak takip edin.

İlişkiler

Kod Kokusu 12 - Boş

Code Smell 139 - Kullanıcı Arayüzünde İş Kodu

Code Smell 73 - Beklenen Durumlar İçin İstisnalar

Code Smell 72 - Dönüş Kodları

Daha fazla bilgi

Boş: Milyar Dolarlık Hata

Kredi

Unsplash'ta Jasmin Sessler'in fotoğrafı

Sorumluluk reddi beyanı

Kod Kokuları sadece benim görüşüm .


Null ile ilgili asıl eleştirim, programınızı kontrol etmeden hızlı mı çalıştıracağınızı yoksa kontrol ederek yavaş mı çalıştıracağınızı seçme zorunluluğunun tüm acısını gereksiz yere geri getirmesidir.


Tony Hoare (Geçersiz Mucit)


Yazılım Mühendisliği Harika Sözler


Kod Kokusu 158 - Değişkenler Değişken Değil


Bir değişkene değer atarsınız ve onu kullanırsınız ancak asla değiştirmezsiniz.


TL;DR: Değişkenlik konusunda açıklayıcı olun.

Sorunlar

  • Okunabilirlik
  • Bijection değişkenliğini onurlandırın.
  • Potansiyel performans ve bellek sorunları.

Çözümler

  1. Değişkeni bir sabite değiştirin ve kapsamını netleştirin.

Yeniden Düzenlemeler

Yeniden Düzenleme 003 - Sabiti Çıkart

Yeniden Düzenleme 008 - Değişkenleri Sabite Dönüştür

Bağlam

Her zaman etki alanından öğreniyoruz.


Bazen bir değerin MAPPER ile değişebileceğini tahmin ederiz.


Daha sonra değişmeyeceğini öğreniyoruz.


Bu nedenle bunu sürekli hale getirmemiz gerekiyor.


Bu aynı zamanda Sihirli Sabitleri de önleyecektir.

Basit kod

Yanlış

 <?php function configureUser() { $password = '123456'; // Setting a password on a variable is another vulnerability // And Code Smell $user = new User($password); // Notice Variable doesn't change }

Sağ

 <?php define("USER_PASSWORD", '123456') function configureUser() { $user = new User(USER_PASSWORD); } // or function configureUser() { $user = new User(userPassword()); } function userPassword() : string { return '123456'; } // Case is an oversimplification as usual

Tespit etme

  • [x] Otomatik


Birçok linter, değişkenin yalnızca bir ataması olup olmadığını kontrol eder.


Ayrıca mutasyon testi de gerçekleştirebilir ve testlerin bozulup bozulmadığını görmek için değişkeni değiştirmeye çalışabiliriz.

Etiketler

  • Değişkenlik

Çözüm

Değişken kapsamı netleştiğinde kendimize meydan okumalı ve yeniden düzenlemeli ve onun özellikleri ve değişebilirliği hakkında daha fazla şey öğrenmeliyiz.

İlişkiler

Code Smell 116 - 'var' İle Bildirilen Değişkenler

Code Smell 127 - Değişken Sabitler

Code Smell 107 - Değişkenlerin Yeniden Kullanımı

Code Smell 02 - Sabitler ve Sihirli Sayılar

Daha fazla bilgi

Mutantların Kötü Gücü

Sorumluluk reddi beyanı

Kod Kokuları sadece benim görüşüm .

Kredi

Unsplash'ta Noah Buscher'ın fotoğrafı


Çalışan karmaşık bir sistemin, çalışan basit bir sistemden evrimleştiği her zaman ortaya çıkar.


John Gall


KOD SmElL 159 - mixEd_cASeI

Ciddi geliştirmeler birçok farklı kişi tarafından gerçekleştirilir. Anlaşmaya başlamalıyız.


TL;DR: Farklı büyük/küçük harf dönüşümlerini karıştırmayın

Sorunlar

  • Okunabilirlik
  • Sürdürülebilirlik

Çözümler

  1. Bir vaka standardı seçin


  2. Ona tutun

Bağlam

Farklı kişiler birlikte yazılım yaptıklarında kişisel ya da kültürel farklılıklar ortaya çıkabilir.

Bazıları camelCase 🐫'i, diğerleri yılan_case 🐍, MACRO_CASE🗣️ ve daha birçoklarını tercih ediyor.


Kod basit ve okunabilir olmalıdır.

Basit kod

Yanlış

 { "id": 2, "userId": 666, "accountNumber": "12345-12345-12345", "UPDATED_AT": "2022-01-07T02:23:41.305Z", "created_at": "2019-01-07T02:23:41.305Z", "deleted at": "2022-01-07T02:23:41.305Z" }

Sağ

 { "id": 2, "userId": 666, "accountNumber": "12345-12345-12345", "updatedAt": "2022-01-07T02:23:41.305Z", "createdAt": "2019-01-07T02:23:41.305Z", "deletedAt": "2022-01-07T02:23:41.305Z" // This doesn't mean THIS standard is the right one }

Tespit etme

  • [x] Otomatik

Çalışanlarımıza şirketimizin geniş isimlendirme standartlarını anlatabilir ve bunları uygulayabiliriz.


Kuruluşa yeni insanlar geldiğinde, otomatik bir test kibarca ondan kodu değiştirmesini istemelidir.

İstisnalar

Kapsamımız dışındaki kodlarla etkileşime girmemiz gerektiğinde, bizim standartlarımızı değil, müşterinin standartlarını kullanmalıyız.

Etiketler

  • Adlandırma

Çözüm

Standartlarla uğraşmak kolaydır.


Bunları uygulamamız gerekiyor.

İlişkiler

Code Smell 48 – Standartsız Kod

Daha fazla bilgi

Bir isim tam olarak nedir - Bölüm I Arayış

Tüm adlandırma kuralları

Sorumluluk reddi beyanı

Kod Kokuları sadece benim görüşüm .

Kredi

Unsplash'ta Wolfgang Hasselmann'ın fotoğrafı


Eğer çok fazla özel durumunuz varsa yanlış yapıyorsunuz demektir.


Craig Zerouni


Kod Kokusu 160 - Geçersiz Kimlik = 9999

Maxint, geçersiz bir kimlik için çok iyi bir sayıdır. Ona asla ulaşamayacağız.


TL;DR: Gerçek kimlikleri geçersiz olanlarla birleştirmeyin. Aslında: Kimliklerden kaçının.

Sorunlar


  • Geçersiz kimliğe sandığınızdan daha erken ulaşabilirsiniz.



  • Bayrakları arayandan işlevlere bağlama.

Çözümler

  1. Özel durumları özel nesnelerle modelleyin.


  2. Geçerli etki alanı nesneleri ve uygulama bağlantısı oldukları için 9999, -1 ve 0'dan kaçının.


  3. Boş Nesneyi Tanıtın

Bağlam

Bilgi işlemin ilk günlerinde veri türleri katıydı.


Sonra milyar dolarlık hatayı icat ettik.


Daha sonra büyüdük ve polimorfik özel değerlerle özel senaryolar modelledik.

Basit kod

Yanlış

 #include "stdio.h" #include "stdlib.h" #include "stdbool.h" #define INVALID_VALUE 999 int main(void) { int id = get_value(); if (id==INVALID_VALUE) { return EXIT_FAILURE; // id is a flag and also a valid domain value } return id; } int get_value() { // something bad happened return INVALID_VALUE; } // returns EXIT_FAILURE (1)

Sağ

 #include "stdio.h" #include "stdlib.h" #include "stdbool.h" // No INVALID_VALUE defined int main(void) { int id; id = get_value(); if (!id) { return EXIT_FAILURE; // Sadly, C Programming Language has no exceptions } return id; } get_value() { // something bad happened return false; } // returns EXIT_FAILURE (1)

Tespit etme

  • [x] Yarı Otomatik


Kodda özel sabitleri ve özel değerleri kontrol edebiliriz.

Etiketler

  • Hükümsüz

Çözüm

Harici tanımlayıcılarla ilişki kurmak için sayıları kullanmalıyız.


Harici bir tanımlayıcı yoksa bu bir sayı değildir.

İlişkiler

Code Smell 120 - Sıralı Kimlikler

Kod Kokusu 12 - Boş

Daha fazla bilgi

Boş: Milyar Dolarlık Hata

Y2K22 - Bizi Utandıran Hata

Sorumluluk reddi beyanı

Kod Kokuları sadece benim görüşüm .

Kredi

Unsplash'ta Markus Spiske'nin fotoğrafı


Böcekler köşelerde gizlenir ve sınırlarda toplanır.


Boris Beizer


Yakında 5 kod kokusu daha geliyor…