เคย refactor code ที่เขียนมั้ย

17 March 2008

    หัวข้อที่แล้วแนะนำ แหม่จะพูดแนะนำก็ไม่ถูกเพราะไอ้ที่ผมเขียนก็มีอาจารย์ท่านหนึ่งบอกมาอีกที แต่ก็นั้นแหละ ขอพูดว่าแนะนำละกัน  ได้คุยกับเขาแหละเขาก็แนะนำการ refactor code ผมก็งงว่ามันคืออะไร อาจารย์ท่านนั้นก็บอกว่า มันคือการทำให้ code ของเราอ่านเข้าใจง่ายขึ้น ดูไม่ซับซ้อน เวลาใครนำไปใช้หรือ นำไปพัฒนาต่อเขาได้ดูง่ายๆ ผมก็บอกว่าไม่เคยได้ยิน อาจารย์ก็บอกอีกว่า คือคนไทยยังไม่ค่อยชินกับการ refactor code เท่าไร พอจะพัฒนาต่อก็ไม่ได้ ทำให้ต้องทำใหม่หมด ทำให้เสียเวลา  เพราะฉนั้นแล้วการ refactor code ถือว่าสำคัญ ผมเองยังไม่ค่อยเก่ง programming เท่าไรก็ได้อาจารย์ท่านนั้นสอน แล้วก็นำมาเขียน blog อีกทีนึง เอาละ การ refactor code เราจะทำยังไงกันดี

ตัดสิ่งที่ไม่จำเป็นออกไป ผมว่าตรงตัวนะ refactor   ยกตัวอย่างเช่น   คุณเขียน program บวกเลข ยกตัวอย่างเช่น เขียนง่ายๆก็จะได้ประมาณนี้ทำเป็น function นะ

def add(a,b):

c = a + b

return c

add(5,7)

แต่บางคนอาจจะเขียน

def add(a,b):

return a + b

add(8,9)

ก็ทำให้ ลด บรรทัดในการทำงานเข้าไปอีก หรือ จะประกาศตัวแปร แบบนี้

a , b , c = 1 , 2 , 3 หรือตามทั่วไปคือ

a = 1

b = 2

c = 3

ถ้าทำยังงี้ต้องเขียนถึง 3 บรรทัดแต่ถ้าเราเขียนยังที่ผมบอกก็ประหยัดบรรทัดเข้าไปอีก ช่วยภาวะโลกร้อน (ไม่ได้เกี่ยวอะไรกันเลย)

บางทีเราเขียนโปรแกรมธรรมดาอาจจะไม่ค่อยเห็นความแตกต่าง เพราะบางคนทรัพยากรสูง   codeของเราหรือโปรแกรมเราต้องรับ transaction เยอะ การเขียน code ให้กระชับ รวดเร็ว ก็อาจจะทำให้ระบบดีได้ในส่วนหนึ่ง  แต่ output ต้องออกมาเหมือนเดิมด้วยนะ อันนี้สำคัญที่สุด

ที่เขียนนี้ถ้าเป็น programmer เก่งคงไม่ต้องกังวลเพราะ refactor ใส่ comment ทำ doc ให้โปรแกรม ส่วนมาก programmer ทำกันอยู่แล้ว แต่เป็นคนพึ่งหัดเขียนโปรแกรม อาจจะสนแต่ output จนลึมดูว่า code มันทำได้หลายแบบ และแต่ละแบบ ดี ด้อย ต่างกันไป ตัวผมเองก็ไม่รู้จนอาจารย์ท่านนี้มาบอกอะแหละ ตาสว่างขึ้นเยอะ


code ที่คุณเขียนใช้เวลาเท่าไร

13 March 2008

    ปัญหาอีกอย่างนึงของคนเขียนโปรแกรมคือ นอกจากจะได้ output ที่ออกมาตามความต้องการแล้ว คุณต้องทำให้ไว ถ้าทำได้ให้ล้านนึง(กำ เหมือนรายการไรหว่าจำไม่ได้)  เพราะว่าความเร็วถือว่าเป็นปัจจัยสำคัญในการเขียนโปรแกรมอีกอย่างหนึ่งเลยก็ว่าได้  ยิ่งคุณเขียน code ให้ทำงานไว ประมวลผลใช้เวลาไม่นาน ก็อาจจะทำให้ประสิทธิภาพโดยรวมดีขี้น เพราะเดี๋ยวนี้อะไรมันต้องไวครับ (เหมือนโฆษณาอะไรหว่า) คือบางทีการเขียน code นี้มันวัดกึ๋นคนเขียนเลยก็ว่าได้นะ แต่ผมเขียนไม่เก่งหรอก ผมอยากเป็น programmer เก่งๆ ตอนนี้ก็คลืบคลาน มืด 11 ด้านอยู่ ก็หัดไปเรื่อยๆ เดี๋ยวจะคิดว่าผมเป็นโปรแกรมเมอร์ เหอๆ (คงไม่มีใครคิดหรอกมั้งเพราะดูจาก code ที่เขียนไม่เซียนเลย) ร่ายสะยาวไปดูวิธีตรวจสอบโปรแกรมดีกว่าว่าเร็วขนาดไหน อันนี้ได้มาจากพี่ท่านหนึ่งครับ เขาเป็นอาจารย์ แล้วก็เขียนโปรแกรม ไม่ได้จบ คอมพิวเตอร์มา แต่เก่งเขียนโปรแกรมมาก เพราะฉนั้นแล้ว ผมว่า อยู่ที่ใจรักจริงๆ ต้องขอบคุณท่านนี้ครับที่ มอบความรู้ให้ผม มาดู code กันเลย

from datetime import datetime
start = datetime.now()

for i in range(20):

print i

stop = datetime.now()

print start
print stop
print stop  -  start

แค่นี้เราก็รู้แล้วว่า code เราใช้เวลาเท่าไร แล้วแต่ละ code ที่เราเขียนให้ output ออกมาเหมือนกันแต่ว่า อยากได้ code ที่ไวที่สุด


commandline argument

8 March 2008

ครั้งที่แล้วผมเขียนเกี่ยวกับการเปิดไฟล์อ่าน แต่ว่าระบุไฟล์ลงไปว่าเปิดไฟล์อะไร แต่ถ้าเราไม่ระบุหละว่าไฟล์อะไร เราอยากให้มันทำได้ทุกไฟล์ ก็ต้องใช้ทำแบบ commandline argument ตอนแรกผมก็ไม่รู้จะทำยังไง ก็หาจาก internet อีกนั้นแหละ ก็ search หาเอา ก็ไปเจอตัว sys.argv พอดูๆก็มาดัดแปลงเอาก็ได้

import sys
for i in open(sys.argv[1]):

if i.startswith(“>”):

print i,

อันนี้คือเราจะทำได้ทุกไฟล์ก็คือให้แสดงบรรทัดที่ขึ้นต้นด้วย > ในไฟล์ที่เราต้องการ เวลา compile ก็

python file.py openfile.*

โดยที่ file.py คือ file ที่เรา save code ไว้ และ openfile.* คือไฟล์ที่เราจะเปิด แค่นี้ก็ได้แล้วเห็นมั้ยครับว่าง่ายๆ