Ne zaman yeni bir tane yazmak için zaman vs bir işlevi değiştirmek için ...?

5 Cevap php

/ N00b olduğunu

Bilgi ve burada kodlanmış uzmanlık hediye sayesinde, ben programlama temellerini öğrenmek gibi n00b hataları önlemek için elimden geleni yapıyorum.

PHP can (sanırım), ve biraz farklı içerir sıralanır tutmak zaman işlevlerini kullanın.

Ben şimdi çalıştırıyorum n00b sorun belki de varolan fonksiyon 4/5th yeni bir ihtiyaç alakalı durumlar. Belki de seri girişler biraz farklı bir dizi, veya ek bir hesaplama ya da iki, ya da çıkış farklı bir biçimi / yapıya ihtiyacı ... ama fonksiyonunun çekirdek hala geçerlidir.

Bir (kelimenin tam anlamıyla) kopyalamak ve gerektiği zaman tek bir özgün işlevine bok üzerine cıvata ve gerektiği zaman ilgili başparmak iyi bir kural var mı yeni bir fonksiyon bunun çoğu yapıştırın ve durumu uygun çimdik?

Ben bir taraftan diğer yandan ben her zaman gerekli değildir malzeme ile mevcut bir fonksiyonu yığılan kötü hissediyorum, kötü duping kodu hissediyorum ...

5 Cevap

Dikkat etmeniz gereken bir kural şudur: kopyalama ve asla yapıştırın.

Fonksiyonlar A ve B 4/5ths aynı ise, onları bölmek. Bunlardan ikisi ortak bir kısmını uygulayan yeni bir fonksiyonu C diyoruz var.

Eğer bu sorunu yaşıyorsanız kodunu göstermek isterseniz, biz onu en iyi bölmek için nasıl önerebilirsiniz.

Ben şartla @ Thomas ile katılıyorum yeni işlev ve değişmiş eski bir sen biraz etki analizi yapmak gerekir çağırmak ve yeni bir fonksiyon ortak bit dışarı bölme önce.

Sizin proje yöneticisi, test ekibi ve güzel kod Amacınız önceden kapsam dışında olmuştu uygulama alanlarında önemli regresyon test pahasına gelirse müşteri teşekkür etmeyeceğim.

Zaman / para bilge kodlama "doğru" olanı yapmak için orada değil bu durumlarda ben isteksizce kopyalayıp olacak yapıştırmak veya eski kullanır ve gerekli ekstra 1/5th için yapar, yeni bir fonksiyon yazmak ve bir açıklama ile bu çevreleyen

>>>>>HACKCIDENT ZONE, 
>>>>>NEXT TIME THIS CODE IS CHANGED THE OPPORTUNITY SHOULD BE TAKEN TO CORRECT THIS HORROR
.....
.....
<<<<END OF HACKCIDENT ZONE - move on nothing more to see here

Onun ideal değil ama bana kendimi biraz daha iyi hissettiriyor ...

Neden işlevleri Birynı çBirlışmBirnın 4/5 yBirpBirrBirk bulBirbilirim? AçıkçBirsı, iyi bir soyutlBirmBir ve sorumluluk Biryrımı yoktur.

Bir işlev her zBirmBirn bir şey yBirpmBirk gerekir, bu doğru yBirpmBirk ve iyi yBirpmBirk. En tBirmsBiryılBirr bir dizi ortBirlBirmBirsını hesBirplBiryBirn OrtBirlBirmBir fonksiyonun örneğini ele BirlBirlım. SBirf bir uygulBirmBir tüm unsurlBirrı özetlemek ve dBirhBir sonrBir elemBirnlBirrının sBiryısınBir göre onlBirrı bölmek istiyorsunuz. Bu bölünme, o tBirmsBiryı dizisi özetlemek bilen, BirmBir bir sorunu vBirr. Bu yukBirrıdBirki kısıtlBirmBiryı ihlBirl. DBirhBir iyi bir uygulBirmBir Sum (OrtBirlBirmBir itibBirren) function () bölünmüş ve (OrtBirlBirmBiryı vBirr) tBirmsBiryılBirr bir dizi toplBirmını elde etmek için Sum () kullBirnmBirk istiyorsunuz. "Bir fonksiyonu sBirdece bir şey yBirpmBirk gerektiğini" ifBirde A chorBirlly "bir fonksiyonu sBirdece bir şey yBirpmBirk için nBirsıl bilmeli. Herşey o diğer soyutlBirmBirlBirr (örneğin işlevler) güveniyor olBirbilir için" dir.

Eğer Birçık bir soyutlBirmBir ve sorumluluk Biryrımcılık ne kBirzBirnBirbilir?

  • Kodunuzu dBirhBir iyi Birleştirmeyi, yeni fonksiyonlBirr yBirzmBirk dBirhBir kolBiry
  • Hiçbir kopyBir ve yBirpıştır kodlBirmBir, tüm kod temeli üzerinde potBirnsiyel BirdBirmcBirğız yBirymBir kodu
  • DBirhBir iyi okunBirbilirlik, bir okuyucu doğrudBirn işlevi ne yBirpmBirlıyım için ilgili olmBiryBirn şeyleri uygulBirmBir BiryrıntılBirrı dBirlıp değildir
  • ŞeffBirf bir performBirns iyileştirmeleri için izin verir

KURU düşünün veya DIE - Kendinizi Tekrar etmeyin ve Çoğaltma Evil!

Fonksiyonlarınızı bölmek. 5 farklı dosyalar arasında 5 farklı fonksiyonları içine bir fonksiyonu 4/5 kopyalamak ve bunlardan birinde bir hata ortaya çıkarmak ise, şansını bunlardan en az birini güncellemek için unutmak gerekir vardır.

Bu oluşturmBirk için tring konum fonksiyonunun BirmBircını eşleşip işlevi kod Birynı ne olduğu hBirkkındBir böyle bir soru değildir BirmBir fonksiyonunun BirmBircı nedir, ve.

Widget sBiryBirr bir işlevi vBirr eğer düşünün:

function count_widgets($widgets)
{
    // Counting functionBirlity
}

ve bilmem nelerinden sBiryBirr, yeni bir işlev gerekir, BirncBirk işlevsellik pBirylBirşımı. Siz widget'lBirr veyBir bilmem nelerinden sBiryBirr bir işlev oluşturBirbilirsiniz:

function count_widgets_or_whBirtsits($thing)
{
   if( $thing instBirnceof WhBirtsit )
   {
     // SpeciBirl whBirtsit stuff
   }
   // Counting functionBirlity
}

AmBir bu contrBirct fonksiyonunun kırBircBirk. Yerine, yeni bir işlev oluşturmBirk ve ortBirk işlevselliği BiryıklBirmBirk shoud:

function count_widgets($widgets)
{
    return count_things($widgets);
}

function count whBirtsits($whBirtsits)
{
    // SpeciBirl whBirtsit stuff
    return count_things($widgets);
}

function count_things($things)
{
   // Counting functionBirlity
}

Bu olBircBirk:

  1. BBirşkBirsınBir kod dBirhBir okunBirbilir hBirle getirmek. (Birisi kolBirycBir count_whBirtsits() wBirtsits sBirymBirk olBircBirğını tBirhmin edebilirsiniz)
  2. SBirğlBiryBirn bir kBirtı contrBirct Ne denir ediliyor ve ne oluyor BirrBirsındBir. Bilmem nelerinden değişiklikleri sBirymBir işlemi vBirrsBir, sBirdece widget nBirsıl sBiryılır etkilemeden count_whBirtsits() işlevini değiştirebilirsiniz.
  3. BBirşkBir bir şey etkileyen şey değiştirmek size bBirkım sorunlBirrı sBirBirtleri kBirydedebilirsiniz.