 So today I'm going to talk about Konmari, your PHP. Anyone do not know who is Marie Kondo? Please raise your hands. Everyone knows, everyone knows. We just went through Chinese years, so we do a lot of spring cleaning. So Marie Kondo is a very hot topic. But I was thinking that as I was tidying up my staff for the new year, I was just thinking how should I tidy up my code. So basically I came up with this topic. So a bit about myself, I started coding PHP back in 2010, back in NUS when I was doing a school project. So my first framework was Codeiniter, which was easy for me to at least learn as opposed to symphony. So then subsequently I developed a CRM plus a PUS, plus a HR system using Codeiniter and I shipped it since 2012. So that was my first shipped product as a developer. So 2010-2012 is 2 years. Okay, then after that I jump into JavaScript, do a lot of visualisation, animation stuff for the government, basically visualisation dashboard. Before I joined SPH 2016, ever since I was doing Drupal creating custom modules as well as doing a lot of many other things because SPH has a lot of things that we can do. So that's the thing I'm still here today. So but at some point of time in my life, which is last year, it reached to me, it dawned on me that I've been doing things, new things and new things and it's always like switching from framework A to framework B from PHP to JavaScript. Now I was thinking to myself as a developer, am I building my depth? So usually they class coding monkey. So I'm a thinking coding monkey. So am I building my depth or am I just building breath as a programmer? Am I just learning the various languages, the various frameworks, but I don't go deep enough? So I was thinking about it. I was also still thinking about whether my codes, the codes that I write now, last time, is there any difference? Is it better? Is it more elegant when my fellow team-mates actually look at my code? Do they like, eew, what's that? Or do they like, oh wah, eew, why is it very nice? So I was thinking about that as well. And so also the last point was after PHP, if I move on to Golang or all this, but then it's never ending. There always be a new language, a new framework. But then what about me myself as a coder? So I chanced upon two books. One of it is clean code. The other is refactoring. You can see them. This is the second edition of refactoring. The first edition is for Java. The second edition is for JavaScript. And they have clean code. So they are written by very senior programmers, which is Uncle Bob and Martin Fowler. And I chanced upon the book and I was reading it. So the thing about how they wrote this book was that at certain points in the book, they actually wrote like almost like a self talking to themselves. Like, oh, actually last time I wrote my code in a very bad way. So hence I decided that I need to write code in this better way so that my fellow colleagues are able to know read my code better. So there's a lot of self reflection in the book as I was reading it. And that caused me to spark me on to actually ready read deeper and then to actually internalize it and then to practice it on my daily coding adventures. So hence this is why today I'm actually sharing with you some of the learnings that I've learned especially this one will be more targeted for refactoring because it really gives you a point by point technique of how you actually shorten your code which we will see later in our code it out so that everyone can see also. So to begin with Martin Fowler was pointing out that there are a number of code smells. Anyone is familiar or not familiar with the term code smells? Familiar? Raise hands. Not familiar? Raise hands. Okay. So code smells is basically like your banana that has been in the fridge for too long and it start to smell the same thing when your code is in your code base for too long and it is either too long or people really really don't understand the moment people see that when they are trying to debug something then they see it from I don't know what is this function I don't want to touch really that kind of bad feeling that is invoked when someone else or you yourself look at the code that is code smells and for Martin Fowler he actually indicated so these are a lot I enlisted in some of it is like duplicator code okay I'll be very honest I have duplicator code in my code base who is agreeing to this duplicator code okay okay okay long method when I was younger as a developer I have super long methods they are like 50 lines long is still in that remember the 2012 system I have that they are super old here large class are actually this one I didn't really touch my PHP mostly procedure not so much class but I'm going to words classical PHP long parameter list anyone has this issue when your function has super long parameter list I also make the same mistake I also I also learn it came to a point where shit like I change something or I have to amend my function definitionity because there's one more one more parameter I need to add so that was what it cost me to start to think then one new thing I learned is shotgun surgery so actually I find I make it into more singlish it means if you want to change one feature you have to change many parts of your code in different parts of this is what you call shotgun make a shotgun you you are injured with many many places this is cause shotgun surgery so there's more but these are the some of the code smells that I read that was very interesting and it hit me home now with code smells then of course we identified pain we also need to know how we can address our pain so that we become we become better and some of the cleaning up strategies like extract method inline method I'll show you in detail how it actually happens later replace temp with query decompose conditional conditional means your switch statement your e-file statements consolidate your conditional expressions and remove control flag okay all this I'll share later which is going to happen in the next slide okay so let's tidy up so I'm going to sit down and I'm going to show you my this okay so this is a very simple PHP code it includes a number of simple classes that I wrote to demonstrate some of the the things that I'm some of the code smell as well as the cleaning strategy so let's begin with customer so there's a customer example okay I initialize as a can 20 years old it's fake ya it's okay and I show particulars okay so let's run this program okay so first first of all we will see what is it like how the program behave first before we actually even do any cleaning up because maybe let's say after I clean up the outstanding becomes 20 actually the is a is a mistake is a if my name is no longer can after refacturing then then is no point it means I've already cost the program to break already so okay let's go back to the quote so customer so I have a customer class my attributes is name and age I declare using a constructor okay this how I actually you know show my particulars just now you know there's a print you know you see the header here you know can no can see let me just increase yeah the header then my name and all they so it's printed over here so one of the first things that we can do actually is that do you notice okay we notice that this part of the quote okay the the name of the function is called show particulars but these three lines of quote actually is just for display purpose for aesthetic you just want to show a title okay so one way is we can shorten this because is just extra pieces of information for display purposes so what we can do is that we can okay I I use this and let me copy and paste this thing me extract okay I create a function call print header okay print header it takes in a header variable and then I do the magical thing lah to you know display this customer so what I subsequently can do is basically do this replace this three lines of quote with a function and this function will print my header based on whatever I want to put here so like for example customer you'll print customer okay so after I so this is what is called as the extract method because you basically compress three lines that doesn't have much semantic meaning to the function you extract it out and then you you call yourself a function itself so people understand a or j your these three lines what is they trying to do is more clear cut so with this let me save then let me run the function again okay it still works so my refactoring is okay I didn't cause anything to break so this is the first cleaning strategy extract method okay second thing I will want to introduce is in line temp okay what is in line temp we we notice that over here there is this variable call can be a ploy okay which is assigned with the return value of this function which is is employable H and you pass in the H of the person here and then if the person's H is employable then I print out employable okay so actually I ask you do you all feel that this line is a bit redundant? please please raise hand you all need to get the same feeling or else I I scare I'm just talking to a piece of a a wall ya ya may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may may Okay, kemudian yang sama. Bergerak lagi. Ia masih sama. Jadi, kita mempunyai beberapa alasan dari kode ini dengan dua metod ini, metod ekstrak dan inline 10. Jadi, yep. Ada yang lain pun. Kamu nampak ialah ialah ialah sebenarnya ada fungsi ini disebut ialah ialah ialah dan kemudian, pada alasan saya, saya sebenarnya mengatakan bahawa jika seorang lebih dari 16 tahun dan lebih dari 80 tahun kerana jika kamu lebih dari 80 tahun mungkin kamu patut berhenti. Mungkin. Tapi kita tahu kita mendukung alasan kerja. Tapi bagaimanapun, bagaimanapun, berapa banyak orang dalam alasan kode ini ada beberapa alasan ini? Apa yang kita panggil sebagai alasan khusus, seperti 16 dan 80. Apabila seseorang lain dari mana-mana masuk, bagaimana alasan ini? Ada apa-apa alasan ini? Ya. Jadi, ini apa yang kita panggil alasan magic yang kita dapat mengelakkan kerana hal ini, apa yang saya katakan, jika alasan baru datang, bagaimana alasan 16, bagaimana alasan 16, bagaimana alasan 80, bagaimana alasan ini? Meskipun, ya, alasan ini memberikan alasan itu cuba berkata bahawa alasan ini adalah alasan pekerjaan. Tapi, alasan 16 dan 80 kelihatan sangat abang-abang. Jika alasan 16 dan 80 digunakan di banyak tempat dari alasan lain, jika perubahan berubah, jika perubahan mengubah CPF, mengubah alasan, kemudian banyak perkara yang perlu diubah. Jadi, mengubah alasan ini dengan alasan yang digunakan. Dalam alasan ini, anda mempunyai alasan minimum, alasan emas, dan alasan maksimum, yang saya mempunyai, saya perlu mempunyai. Ya, ini di sini. Jadi, saya meletakannya di atas alasan saya. Ya, jadi, ia menjadi sangat jelas apabila seseorang melihat alasan ini. Okey, anda mempunyai semua alasan ini dan alasan ini. Jadi, mari kita menggunakan program lagi. Ya, ia masih bekerja. Okey. Jangan kata, saya tidak... Okey, sepatutnya, kita patut memulai alasan lebih komprehensif. Ini hanya untuk alasan yang digunakan. Tapi, mari kita lihat, jika saya mengubah alasan saya pada 80-90 tahun lalu, mari kita lihat apa yang berlaku. Ya, kemudian, ia tidak menunjukkan, saya tidak penyakit, kerana tidak ada alasan untuk mengubah alasan saya. Ya. Jadi, ini dua teknik yang mempunyai alasan yang lebih komprehensif dan alasan yang lebih komprehensif. Okey, jika kita bergerak, saya akan menjelaskan teknik yang berlaku. Dan apa itu teknik yang berlaku? Biasanya, ia berlaku. Okey, kita mempunyai alasan yang lebih komprehensif dengan alasan ini, seperti alasan winter, alasan winter servis, alasan sumber, tergantung alasan ini. Ia mempunyai alasan yang unik, dan kita mempunyai alasan ini, maksudnya, alasan winter bermaksud anda mempunyai alasan winter dan anda mempunyai alasan winter dan jika alasan winter mempunyai alasan winter, okey, saya akan menunjukkan. Di sini, alasan itu, anda tahu, jika lebih daripada 1,000, saya akan menunjukkan 5%, jadi anda hanya perlu menunjukkan 95% tetapi jika lebih daripada 1,000, anda hanya menunjukkan 2% alasan winter. Okey, ada perkara ini yang dipunyai alasan winter, jadi apa yang dipunyai alasan winter? Sebenarnya, sebab ini sebenarnya menunjukkan dengan jauh-jauh yang Martin Fowler menunjukkan dalam alasan ini. Pertama, ia dia ingin sebenarnya menghidupkan semua alasan ini. Terutama, alasan ini, alasan ini, alasan ini yang ada alasan winter dan sebagainya. Dia ingin sebenarnya menunjukkan dengan alasan winter. Dan bagaimana ia melakukan itu, sebenarnya, anda menunjukkan alasan yang dipunyai alasan winter. Okey, jadi sebenarnya, saya menunjukkan alasan winter. Saya mengambil alasan ini, dan saya menunjukkan alasan ini. Dengan alasan winter. Okey, jadi ini adalah alasan pertama. Kemudian juga, saya juga mendapat alasan ini untuk sebenarnya mendapat alasan winter. Dan saya sebenarnya menunjukkan dengan alasan ini. Bagaimana alasan ini? Kerana saya ada alasan. Bagaimana alasan ini? Bagaimana alasan ini? Bagaimana alasan ini? Bagaimana alasan ini? Bagaimana alasan ini? Bagaimana alasan ini? Bagaimana alasan ini? Bagaimana alasan ini? Jadi anda dapat sepatutnya menunjukkan orang ini, kan? Ya. Okey. Ada seorang pergerakan, yang lain anda bernilai. Faul Martin sebenarnya sangat tersembunyi dengan Maksudnya, dia ingin fungsi untuk menjadi sebatas-batas mungkin Kerana apabila saya baca ini Saya sebenarnya merasa bahawa Ada banyak... Saya takkan dapat mengambil ini jika saya berada di atas Tetapi dia sebenarnya mengambil semua panggilan ini Yang sebenarnya tidak terlalu berbeda Ia masih di sebagainya Tetapi kemudian dia memastikan dan menggunakan sebagai fungsi Jadi, yang ini Ia terbuka Sebelum saya tidak berkata bahawa Ia adalah apa yang dia katakan Saya akan memikirkan seperti sebuah bulan yang berlalu Saya akan melihat bagaimana ia berlalu Tetapi saya merasa sedap apabila dia melakukannya Tetapi itu ialah panggilan saya Saya tidak pasti bagaimana anda merasa itu sebenarnya Tetapi bagaimanapun Ada lebih banyak keadaan Akhirnya, apa yang dia sebenarnya menyebabkan adalah Untuk sebenarnya menerima panggilan ini Yang adalah perkara ini Saya meletakkan di sini kerana Ia adalah variable tempur Dan perkara ini Sebenarnya Ia boleh diletakkan juga Ia boleh diletakkan Ia juga digunakan di sini Panggilan ini Ia adalah Fungsi yang ditangkap Fungsi yang ditangkap Jadi, ia menjadi sebuah panggilan Tetapi itu sangat agresif Kerana saya merasa Ia adalah Paling kurang 4-5 panggilan Tetapi ia menjadi sebuah panggilan Tetapi anda melihat di sini Fungsi ini Tetapi ini apa yang dia sebenarnya menyebabkan Macam mana anda boleh Membunyai panggilan anda Dari 5 panggilan menjadi 1 panggilan Jadi, ia adalah apa yang dia menyebabkan Dan ia menyebabkan strategi Untuk membaikkan tempur dengan panggilan Baiklah, saya perlu pastikan Ia akan menerima panggilan dulu Biar saya melihat... Baiklah Jadi, ini Ini keputusan Ya Jadi, selama ini, kita telah melihat 3 keputusan Untuk membaikkan panggilan Baiklah, selama ini, ia mempunyai panggilan Atau... Atau... Boleh, boleh Jadi... Sebenarnya, saya fikir Ia memaksa Panggilan dan panggilan Ia menggunakan 2 atau 3 kali Ia memaksa Ia memaksa 2 kali Kemudian, kadang-kadang Yang kita mempunyai panggilan Kadang-kadang ia menggunakan panggilan Jadi, panggilan panggilan itu 10% panggilan 90% panggilan Kita akan membuat 1 jam untuk membuat panggilan Sebaiknya, selama 9 tahun Kita akan membuat panggilan Jadi, perkara yang sangat penting Ia membuat panggilan Jadi, bagaimanapun Kita akan melihat Pada kelas ini, ada beberapa milik Dan kemudian Kita akan menyebabkan Bagaimana anda akan membuat panggilan Jadi, apabila anda melihat panggilan Ia perlu membuat panggilan Ia perlu membuat panggilan Untuk ke tempat yang berbeza Ia perlu membuat panggilan Bagaimanapun ialah panggilan Bagaimanapun ialah panggilan Ia hanya menggunakan 1 panggilan Jadi, ia mempunyai Panggilan Jadi, ia benar-benar Ia benar-benar mempunyai panggilan Ya Jadi, Yalong Ia adalah salah satu perkara Untuk mempertimbangkan Ya Okey Jadi, dengan perkara ini Saya Kerana mempunyai panggilan Saya akan melihat perkara yang terakhir Ia adalah perkara super Ia adalah perkara ini Saya hanya Boleh melihat kita dari belakang Kerana Ia lebih mudah jika anda semua Boleh melihat perkara ini Okey Jadi, perkara ini Ia adalah kelas pelanggan Ia membuat kelas pelanggan Ia adalah kelas pelanggan Dan Ia membuat kelas pelanggan Ia tidak mempunyai Don atau John Kerana jika Ia membuat kelas pelanggan Mereka perlu beri alat Untuk berkata Ya, ada Ada pelanggan dalam Kastimah ini Atau ada seseorang yang Ia mempunyai Perang Jadi, perkara ini Ia membuat kelas pelanggan Kita melihat Ia adalah panggilan Ia membuat kelas pelanggan Ia mengatakan Keklas pelanggan Kerana Ia membuat kelas pelanggan Ia membuat kelas pelanggan Okey Kita melihat panggilan Ia membuat kelas pelanggan Dan Ia tidak memiliki Ia mengatakan jika Don ada dalam kelas pelanggan Ia memiliki alat Dan Ia memiliki juga yang dipercaya untuk benar. Yang sama untuk John. Okey. Bagaimana anda mencari kode ini? Bolehnya ia dipercaya? Boleh ia dipercaya? Nama boleh dipercaya di tempat ini? Ya. Ada apa-apa lagi? Anda akan mencari kode ini? Sebenarnya saya hanya boleh mengambil. Betul. Betul. Jika anda boleh menggunakan, jika ada apa-apa, jika peribadi ada John atau Dot, mereka boleh mengambil kode ini. Betul. Jika kita mengambil kode ini, jika kita mengambil kode ini, betul. Sebenarnya ia hanya mengambil kode ini, dan saya tidak perlu mengambil kode ini. Sebenarnya perkara pertama adalah... Ya, saya sebenarnya akan mengambil kode ini. Jadi, semua ini sebenarnya sangat menarik. Tapi perkara pertama saya akan mengambil kode ini, yang saya mengambil kode ini. Sebenarnya ini... Saya tidak perlu mengambil kode ini. Jika anda mencari kode ini, jika anda mengambil kode ini, jika anda menerimu, kita boleh mengambil kode ini. Mereka boleh mengambil kode ini. Kemudian, kita akan menerimu kode ini. Kita boleh menerimu. Saya juga boleh... menerimu di belakang. Menerimu sebagai kode. Dan kemudian, menerimu sebagai benar. Macam mana? Yang ini? Okey? Maaf? Macam mana? Ya, betul. Ini EVE Statement, bukan? Ya, betul. Jadi, kemudian, saya akan mengambil kode ini dengan fungsi. Jadi, saya akan mengambil... penerimu yang baik. Dan saya akan mengambil kode ini di sini. Okey, kemudian... dan kemudian saya akan perlu mengambil kode ini... di sini. Penerimu yang baik. Tapi, apa ini? Saya harus menerimu sesuatu di sini? Menerimu... dalam kes itu? Bagaimana? Bagaimana? Okey, bagaimana? Bagaimana? Martin Fahlo yang ingin kita lakukan. Okey. Jadi, sebenarnya... saya akan menerimu seorang... seorang kriminal. Okey. Dan apa? Jika... dan anda juga perlu lakukan ini... Tidak. Ya. Tidak. Tunggu. Tunggu. Biar saya lakukan ini... Betul. Betul. Jadi, nama akan di sini. Seperti itu. Okey. Penerimu yang baik. Bagaimana dengan kode ini di sini? Ya. Bagaimana dengan kode ini di sini? Menerimu. Dan kemudian... Tapi, saya perlu menerimu. Jangan lupa, kita perlu menerimu. Bagaimana? Bagaimana dengan kode ini? Bagaimana dengan kode ini? Bagaimana dengan kode ini? Menerimu. Menerimu. Okey. Jadi, apa yang kita dapat? Bagaimana dengan kode ini? Bagaimana dengan kode ini? Jadi, jika... jika... Bagaimana dengan kode ini? Bagaimana dengan kode ini? Jadi, jika kamu mencuba kriminal itu. Betul. Mereka harus menerimu. Maksudnya, ia baik-baik saja. Jadi, seorang satu orang yang berada di pilihan, ia hanya akan menjelaskan. Itu logiknya. Semuanya baik-baik saja. Bagaimanapun, bagaimana kita mempunyai? Dan lihat bagaimanapun berat. Bagaimanapun berat, ia seperti itu. Tetapi, ada satu perkara yang lebih kecil. Yang Martin Fowler sebenarnya berkata, adalah bahawa, kemudian anda menemukan kriminal, ia lebih daripada hanya menerima kisah anda. Ia juga mengambil beberapa perkara lain, yang sebenarnya adalah untuk menjelaskan perkara lain, seperti menjelaskan SMS dan sebagainya. Jadi, ini adalah sebabnya yang dia panggil sebagai, perkara anda merupakan lebih daripada satu perkara, yang tidak baik. Kerana kadang-kadang membangunkan, anda menerima perkara itu hanya untuk menemukan kriminal, ia juga mengambil kisah SMS. Jadi bagaimana kita dapat mengambil perkara ini? Bawa ini ke atas kualiti, kemudian kita dapat menemukan kisah sekarang. Bawa ke mana? Di sini. Okey, ya. Jadi, kita telah melakukannya. Jadi, ini adalah cara kita sebenarnya... Bagaimanapun berat. Maaf? Bagaimanapun berat. Ya, betul. Jadi, ini adalah cara ini. Ya. Jadi, ya, kita telah melakukannya. Jadi, dari sebenarnya, jika anda melakukannya, sekarang ada banyak logik yang telah berlalu, melalui periksaan, kemudian dalam periksaan, kita telah meletakkan alat, kemudian anda juga meletakkan alat yang benar-benar, untuk fungsi sekuriti ini. Sekarang anda sebenarnya telah menghidupi, dengan cara seperti itu. Sebenarnya, jika anda meletakkan alat, seharusnya anda telah meletakkan alat bahagian, kerana ia seperti, okey, saya mempunyai logik, saya akan mencari periksaan, jika ada periksaan, saya akan menghidupi alat. Oleh itu, saya akan terus meletakkan alat. Ya. Bagaimanapun, anda telah meletakkan alat yang benar-benar? Ya. Bagaimanapun, anda telah meletakkan alat? Seperti itu. Ya. Sangat bagus. Ya. Oleh itu, saya rasa kita semua berada di momentum, mengenai bagaimana kita dapat meletakkan alat. Oleh itu, itu... Jadi, apa yang saya telah meletakkan dengan lelaki anda, adalah sebenarnya, beberapa strategi pekerjaan, yang ada nama untuknya. Jadi, lebih daripada alat anda, oh, kita patut melakukan ini dan itu. Tetapi, tidak ada... tidak ada terminologi untuknya. Jadi, semua ini adalah apa yang kita... Martin Fowler meletakkan, sesetengah bahagian, beberapa bahagian, beberapa bahagian untuk sebenarnya menjadikan apa yang ini teknik pekerjaan adalah tentang. Jadi, ya. Jadi, kembali ke lelaki saya. Oleh itu, di mana lelaki saya? Okey. Jadi, satu perkara adalah, sekarang, jika anda meletakkan di tempat pertama, di mana saya meletakkan pekerjaan adalah, saya selalu periksa bagaimana alat saya yang diperbaiki. Kemudian, saya meletakkan. Kemudian, semasa saya meletakkan sesuatu, saya akan meletakkan dan melihat alat saya. Bukan itu masih sama? Jadi, itu... itu sepatutnya adalah perjalanan asing untuk mengikuti apabila kita semua meletakkan pekerjaan. Dan ini juga digunakan oleh Martin Fowler sendiri. Kerana, sebabnya, adalah proses perubahan yang mengubah tetapi, ia tidak mengubah kekodan keperluan keperluan. Jadi, apa yang ia mengubah? Sebenarnya, ia mengubah mengubah kekodan keperluan keperluan. Jadi, itu adalah bagaimana jika kita pergi hari ini, dan jika sesiapa tanya, oh, apa yang mengubah? Sebenarnya, anda sebenarnya boleh menyebabkan kekodan keperluan ini. Dan kemudian, anda boleh sebenarnya beritahu orang, eh, saya tahu apa sebuah proses mengubah kekodan keperluan dan beberapa strategi pekerjaan. Jadi, saya harap ini adalah kekodan keperluan yang anda semua ada daripada kekodan keperluan saya. Jadi, okey, mari kita mulakan mengubah kekodan keperluan hari ini. Terima kasih banyak.