Home > Refactoring > Method yang panjang

Method yang panjang

ini juga harus dihindari .. satu method itu ga usah panjang2.. eh .. ga boleh panjang2 … bikin mumet aja …
bacanya ga enak .. ga jelas … dan kompleks .. jg sulit untuk dimodifikasi .. nah ukuran panjang itu brapa ??? relatif .. tergantung dengan konvensi di perusahaan atau grup anda .. tapi klo udh lewat satu layar monitor tu udh perlu dipangkas … hehehe

dengan method yg pendek2 kita lebih mudah bacanya. karena kita kan bukan komputer. klo komputer emang ga perduli asal sintaxnya benar aja .. ya udh deh .. jalan. tapi buat manusia yg banyak maunya pasti selalu ingin yg mudah ..

jadi setiap orang yg bodoh pun bisa membuat code yg dapat dimengerti oleh komputer. tapi programmer yg baik menulis code yang dapat dimengerti manusia … so kita pilih yg mana ??

nih klo mw ngerasain baca code yg panjang itu gimana … klo anda masih tetap ga percaya bakal repot bacanya

    public string Statement() {
        double totalAmount = 0;
        int frequentRenterPoints = 0;
        Enumeration rentals = _rentals.elements();
        String result = "Rental Record for " + getName() + "\n";
        while (rentals.hasMoreElements()) {
            double thisAmount = 0;
            Rental each = (Rental) rentals.nextElement();

            //determine amounts for each line
            switch (each.getMovie().getPriceCode()) {
                case Movie.REGULAR:
                    thisAmount += 2;
                    if (each.getDaysRented() > 2)
                        thisAmount += (each.getDaysRented() - 2) * 1.5;
                    break;
                case Movie.NEW_RELEASE:
                    thisAmount += each.getDaysRented() * 3;
                    break;
                case Movie.CHILDRENS:
                    thisAmount += 1.5;
                    if (each.getDaysRented() > 3)
                        thisAmount += (each.getDaysRented() - 3) * 1.5;
                    break;

             }

            // add frequent renter points
            frequentRenterPoints ++;
            // add bonus for a two day new release rental
            if ((each.getMovie().getPriceCode() == Movie.NEW_RELEASE) && each.getDaysRented() >
1) frequentRenterPoints ++;

            //show figures for this rental
            result += "\t" + each.getMovie().getTitle()+ "\t" + String.valueOf(thisAmount) + 
"\n";
            totalAmount += thisAmount;

        }
        //add footer lines
        result +=  "Amount owed is " + String.valueOf(totalAmount) + "\n";
        result += "You earned " + String.valueOf(frequentRenterPoints) + " frequent renter
points";
        return result;

    }

nah perhatikan bahwa banyak komentar dimana2 … itu tandanya kalau code tersebut maksudnya ga jelas jadi perlu dikelompokkan
pada method yg tersendiri…. jadi ketika anda berpikir .. wah .. sepertinya bagian code yg ini butuh comment …
ketimbang anda bikin comment .. lebih baik kelompokkan dalam satu method dan buat nama method yg jelas … nama dalam suatu kelas atau bahasa kerennya identifer adalah merupakan kontrak .. so pilih nama yg benar dan jelas …

dengan mengelompokkan bagian2 kode menjadi method2 kita dapat membuat method tidak menjadi panjang dan method menjadi jelas.
perubahan mudah dilakukan. dan perubahan hanya dilakukan pada satu tempat saja dan mudah di trace jika terjadi kesalahan. ruang pencariannya lebih sempit..

nah ciri lain yg menunjukkan bahwa code perlu diextract adalah conditional dan loop. ya ini hanya perkenalan saja dulu
ntar masuk ke detilnya .. thax

Categories: Refactoring Tags: , , ,
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: