Fakultas Ilmu Komputer UI

Commit 27f44239 authored by Usama's avatar Usama
Browse files

Add clean-code.md

parent 919e9f6c
Pipeline #11348 passed with stages
in 2 minutes and 27 seconds
---
layout: post
title: clean code
date: 2019-04-02 09:33:43 +0700
author: usama
---
Di blog ini saya akan menuliskan tentang clean code dan apa saja yang sudah saya kerjakan yang menurut saya sudah masuk ke dalam kategori clean code. Selamat membaca :).
<!--more-->
<center>
![ ](/assets/images/2019-04-02-clean-code/clean-code.png)
`https://engineering.videoblocks.com/these-four-clean-code-tips-will-dramatically-improve-your-engineering-teams-productivity-b5bd121dd150`
</center>
Berikut ini merupakan tips-tips yang saya dapatkan dari medium yang berjudul **These four _"clean code"_ tips will dramatically improve your engineering team's productivity**
1. "If it isn't tested, it's broken"
Karena kami melakukan TDD dalam men-_develop_ pekerjaan kami, maka saya kira hal ini sudah kami lakukan.
<center>
![ ](/assets/images/2019-04-02-clean-code/1.png)
</center>
2. Choose meaningful names
Penaamaan variabel memang menjadi hal sulit bagi programmer, tapi dalam PPL ini kami berusaha sebaik mungkin untuk menggunakan nama variabel yang representatif. Contohnya saat menamakan atribut dari model yang dibuat di bawah ini.
<center>
![ ](/assets/images/2019-04-02-clean-code/2.png)
</center>
3. Classes and functions should be small and obey the Single Responsibility Principle (SRP)
Saya akan memberikan contoh kode `users/tests.py`.
Daripada kode di bawah ini
```python
class UserTest(TestCase):
def test_user_attributes(self):
self.user = UserFactory(first_name="Usama",
last_name="Ismail", role="staff")
self.assertTrue(hasattr(self.user, "role"))
self.assertTrue(hasattr(self.user, "created_at"))
self.assertTrue(hasattr(self.user, "updated_at"))
self.assertTrue(hasattr(self.user, "deactivated_at"))
self.assertTrue(hasattr(self.user, "last_accessed_at"))
self.assertTrue(hasattr(self.user, "last_accessed_ip"))
self.assertEqual(str(self.user), "Usama Ismail")
```
Lebih baik pilih yang ini.
```python
class UserTest(TestCase):
def setUp(self):
self.user = UserFactory(first_name="Usama", last_name="Ismail", role="staff")
def test_user_has_attribute_role(self):
self.assertTrue(hasattr(self.user, "role"))
def test_user_has_attribute_created_at(self):
self.assertTrue(hasattr(self.user, "created_at"))
def test_user_has_attribute_updated_at(self):
self.assertTrue(hasattr(self.user, "updated_at"))
def test_user_has_attribute_deactivated_at(self):
self.assertTrue(hasattr(self.user, "deactivated_at"))
def test_user_has_attribute_last_accessed_at(self):
self.assertTrue(hasattr(self.user, "last_accessed_at"))
def test_user_has_attribute_last_accessed_ip(self):
self.assertTrue(hasattr(self.user, "last_accessed_ip"))
def test_str_method(self):
self.assertEqual(str(self.user), "Usama Ismail")
```
Mengecilkan task berpengaruh.
4. Functions should have no side effects
Fungsi di bawah tidak menghasilkan side effect, karena hanya mengambil/_read_ models, tidak mengubah database dengan menghapus/edit/menambah data.
```python
class ServerDetailView(generics.RetrieveAPIView):
permission_classes = (permissions.IsAuthenticated,)
queryset = Server.objects.all()
serializer_class = ServerSerializer
lookup_url_kwarg = "id"
```
saat fungsi ini dijalankan, maka kita mendapatkan data dan tidak ada hal lain yang terjadi. Berbeda dengan menjalankan kode berikut.
```javascript
function getUserByEmailAndPassword(email, password) {
let user = UserService.getByEmailAndPassword(email, password);
if (user) {
LoginService.loginUser(user); // Log user in, add cookie (Side effect!!!!)
}
return user;
}
```
Hal ini membuat user menjadi login saat program dijalankan, padahal seharusnya hanya untuk mendapatkan user dengan email dan password.
Sekian yang bisa saya ceritakan.
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment