Technology

Optimasi Kode Anda untuk Meningkatkan Performa Aplikasi Berbasis PHP – Bagian 3

 

Loading...

Setelah sebelumnya kita bergelut dengan prosedural, kita akan coba migrasi kode yang sudah kita tulis kemarin menjadi object-oriented. Tujuan kita masih tetap yaitu, berfungsi sesuai dengan yang kita harapkan, mudah dibaca, reusable, dan efisien. Kenapa kita harus mengikuti trend object-oriented dibandingkan mempertahankan metode prosedural? Mudah dibaca dan reusable berhubungan dengan kerja sama, sehingga jika kode masih menerapkan metode prosedural akan mengalami kendala yang tak terduga dan tak terkendali ketika kode kita sudah mencapai ribuan file dan jutaan line kode

Object Oriented First

Kode kita kemarin adalah sebagai berikut

<?php
$history = array();
function saveTranscript($people, $action)
{
	global $history;
	$history[] = array(
		'date'=>date('U'),
		'message'=>$action,
		'people'=>$people
	);
}

function action($people='gufron', $action='hello', $options=array())
{
	if(!isset($options['color']) || empty($options['color']))
		$options['color'] = '#000000';
	
	if(!isset($options['loop_number']) || empty($options['loop_number']))
		$options['loop_number'] = 1;

	extract($options);

	for($increment = 1; $increment<=$loop_number; $increment++)
	{
		if(in_array($increment, array(4, 7)))
			continue;
			
		print $increment.'. <span style="color:'.$color.'">'.$people.'</span> : '.$action;
		saveTranscript($people, $action);
	}
}

action('gufron','hai apa kabar?',array('color'=>'blue','loop_number'=>3));
action('bot','hallo, saya baik-baik saja. bagaimana denganmu?',array('color'=>'red','loop_number'=>10));

Diatas kita mengetahui tugas dari kode diatas,

  1. Percakapan antara dua user atau lebih
  2. Menyimpan transkrip percakapan

Transkrip dan percakapan merupakan dua hal yang terkait, jika dipisahkan seperti kode diatas, maka akan terjadi repetisi atau pengulangan. Maka dari itu, kita manfaatkan object-oriented dengan memakai class untuk mengefisiensikan kode diatas.

<?php

class Chat
{
	private $history = array();

	protected function saveTranscript($people, $action)
	{	$this->history[] = array(
			'date'=>date('U'),
			'message'=>$action,
			'people'=>$people
		);
	}

	public function action($people='gufron', $action='hello', $options=array())
	{
		if(!isset($options['color']) || empty($options['color']))
			$options['color'] = '#000000';
		
		if(!isset($options['loop_number']) || empty($options['loop_number']))
			$options['loop_number'] = 1;

		extract($options);

		for($increment = 1; $increment<=$loop_number; $increment++)
		{
			if(in_array($increment, array(4, 7)))
				continue;
				
			print $increment.'. <span style="color:'.$color.'">'.$people.'</span> : '.$action;
			$this->saveTranscript($people, $action);
		}
	}
}

$chat = new Chat;
$chat->action('gufron','hai apa kabar?',array('color'=>'blue','loop_number'=>3));
$chat->action('bot','hallo, saya baik-baik saja. bagaimana denganmu?',array('color'=>'red','loop_number'=>10));

Nah kode diatas, jauh lebih efisien dan lebih nyaman untuk dibaca dibandingkan sebelumnya. Untuk referensi mengenai object oriented PHP, silahkan baca referensi pada halaman berikut http://php.net/manual/en/language.oop5.php.

Recursive Method

Nah, dengan memakai object oriented, kita juga bisa memanfaatkan recursive method, artinya kita bisa memanggil methode atau fungsi yang disediakan oleh class tersebut. Tujuannya adalah, kita akan merubah kode ini

$chat = new Chat;
$chat->action('gufron','hai apa kabar?',array('color'=>'blue','loop_number'=>3));
$chat->action('bot','hallo, saya baik-baik saja. bagaimana denganmu?',array('color'=>'red','loop_number'=>10));

Menjadi seperti ini

$chat = new Chat;
$chat
->action('gufron','hai apa kabar?',array('color'=>'blue','loop_number'=>3))
->action('bot','hallo, saya baik-baik saja. bagaimana denganmu?',array('color'=>'red','loop_number'=>10));

Caranya, class diatas kita rubah kodenya menjadi seperti ini

<?php

class Chat
{
	private $history = array();

	protected function saveTranscript($people, $action)
	{	$this->history[] = array(
			'date'=>date('U'),
			'message'=>$action,
			'people'=>$people
		);
		return $this;
	}

	public function action($people='gufron', $action='hello', $options=array())
	{
		if(!isset($options['color']) || empty($options['color']))
			$options['color'] = '#000000';
		
		if(!isset($options['loop_number']) || empty($options['loop_number']))
			$options['loop_number'] = 1;

		extract($options);

		for($increment = 1; $increment<=$loop_number; $increment++)
		{
			if(in_array($increment, array(4, 7)))
				continue;
				
			print $increment.'. <span style="color:'.$color.'">'.$people.'</span> : '.$action;
			$this->saveTranscript($people, $action);
		}
		return $this;
	}
}

$chat = new Chat;
$chat
->action('gufron','hai apa kabar?',array('color'=>'blue','loop_number'=>3))
->action('bot','hallo, saya baik-baik saja. bagaimana denganmu?',array('color'=>'red','loop_number'=>10));

Nah, diatas merupakan kode terakhir yang sudah kita revisi sedemikian rupa sehingga tetap mengedepankan reusable, efisiensi, dan mudah dibaca. Jika ada tambahan yang ingin anda sampaikan, tinggalkan pada komentar dibawah, mari kita berdiskusi bagaimana seharusnya kita menulis kode yang efisien, reusable dan mudah dibaca. Semoga bermanfaat. :-)

Baca juga:

Latihan Pemrograman Website HTML5 (Bagian 1)

Latihan Pemrograman Website HTML5 (Bagian 2)

Optimasi Kode Anda untuk Meningkatkan Performa Aplikasi Berbasis PHP – Bagian 2

Loading...

Berikan Komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *