網頁

2013/01/20

iOS程式設計-1 快捷鍵

這一陣子沒寫Blog是因為從Flash工程師轉型成了手機工程師,經過了忙碌的歲月,於新公司歷練了一年多,最近才打算來分享關於Object-C的大小事(之前太菜了XD)。轉型的過程中當然遇到了一些小小的困難,大約熟悉了三個月才有上手的感覺,一開始遇到Obj-C覺的它是外星球來的語言,function say(odd)變成了[I say:odd],到底發生了什麼事才把Apple的工程師都變成怪胎?

一開始要來介紹Xcode的快捷鍵的功能,它可以節省大量的時間讓你事半功倍。Xcode可是出了名的好用啊。以下是使用Xcode 4.5.2的版本。

command + 鍵盤右鍵   跳到某行的最後面
command + 鍵盤左鍵   跳到某行的最前面
command + /               將某一行程式註解,在按一次可以拿掉註解
command + L                 跳到某一行
command + shift + k     Clean程式(*註一)
command + r                 執行程式(Run)
command + f                 搜尋
command + shift + f      搜尋/取代
command + 左鍵單擊  在某變數/方法上方按下滑鼠左鍵可以跳到一開始定義的地方
command + 左鍵雙擊  和上方的功能一樣,但會另外跳出視窗
control + .                       可以顯示某物件可以使用的方法
tab(+shift)                       可以在函數間往前切換(往後)                          

以上是我常用的快速鍵,真的非常好用啊,誠心推薦~一開始可以先背幾個常用的,之後在慢慢背進階的功能,常用就會記熟了。

*註一:通常改變程式裡的圖片、聲音、文字資料時才會需要Clean後重新Run,否則只有修改程式碼是不需要Clean的。 

2011/09/05

重構 改善即有程式的設計

周日的晚上又失眠了,大腦似乎想要幫我留下周未的尾巴,利用這短短的時間看點書,隨手翻了這一本書–重構 改善即有程式的設計(Refactoring:Improving The Design of Existing Code),無庸置疑的這是一本相當不錯的書,它提供了一些方法讓程式碼不在混亂,書中引用了Kent Beck曾說過的一句話:我不是偉大的程式員,我只是有著一些優習慣的好程式員而已,在軟體的世界中需求時常在變動,隨著程式碼愈來愈多,是不是應該對它做一下大掃除了呢?

  • What:對軟體內部結構的調整,目的在不改變軟體功能下,提高其理解性,降低維護的成本。
  • Why:改進軟體設計、使軟體更容易理解、幫助你找到Bug、提高編程效率。
  • When:事不過三。
  • 如果要為程式加一個新的特性,但程式結構確無法方便加入,那就先重構那個程式,使特性添加容易進行,在加入該特性。
  • 重構的第一個步驟:為即將修改的程式碼建立一個可靠的測試環境。並且這些測試有自我檢驗的能力。
  • 重構時以較微小的步伐修改,如果犯下錯誤,便可以很容易發現它。
  • 寫出人類可以理解的程式碼,是優秀程式員必備條件。好的程式碼應該表現自已的功能,而變數名稱是程式碼清晰的關鍵。
  • 何時不應重構:重寫–程式碼無法穩定工作、專案到了最後期限

這本書有四百多頁,看來要慢慢消化了,來睏...

2011/08/21

ActionScript中的傳值與傳址

今天在看DS發現了一個滿有趣的問題,要怎麼使用ActionSript使用傳址的而不是傳值到函數之中。會這麼想是因為如果使用c語言可以使用指標,但是在as中並沒有這樣功能。

Consider the as function:
var a:int = 1;
var b:int = 2;
swap(a,b);
trace("a:" + a + ",b:" + b); //a:1,b:2

public function swap(num1:int,num2:int):void {
   var temp:int = num1;
   num1 = num2;
   num2 = temp;
}

trace出來會變成「a:1,b:2」,因為是將值丟到swap這個function時,會將a、b複製一個複本給swap的num1,num2,而不是原來的a、b,這樣稱之為「傳值」。如果是c語言就可以直接傳址進去,直接將a、b兩個變數直接交換,由於是直接指向記憶體,稱之為「傳址」。

但在as之中要怎麼辨到傳址的功能呢?它並沒有像c一樣的語法「*、&」可以使用,於是查找了官方文件找到「函數參數」,原來可以包裝成物件,在as中物件是以傳址的方式進行的。

Instead of the code:
var num:Object = {a:1,b:2};
swap2(num);
trace("a:" + num.a + ",b:" + num.b); //a:2,b:1

public function swap2(num:Object):void{
   var temp:int = num.a;
   num.a = num.b;
   num.b = temp;
}

噢,太好啦,終於達到我想要的效果了,可以將兩個變數交換過來了。使用傳址的好處之一是記憶體會較省空間,因為不需要在copy另外一個複本給function(當然區域變數使用完會釋放掉),如此推斷在執行的速度也會比較快,少掉了複製複本的時間。這讓我想到在OOP的撰寫時通常會寫一個Value Object(VO)來描述一個物件的Data Structure,除了可以將資訊做一個整理外,在傳輸時也可以用傳址的方式來處理,這也算是另外一個好處之一吧。

結論:
.自訂類別、物件是使用傳址而非傳值。
.基本物件型別(Boolean、Number、int、uint、String)為傳值而非傳址
.使用傳址會較省記憶體空間,且速度較快
.Array是物件,所以也是傳址

2011/08/20

發佈一些常用的類別




整理了一下之前撰寫的一些常用AS小工具,將原始碼放到了Github了,有興趣的人可以下載來使用囉~Download Source Code

Git是版本控制的一個方法,可以參考下面的文章與簡報:
Ihower
初學筆記 - 指令操作教學
用Git與Github管理軟體開發專案
Git Internals PDF ebook
Pro Git

2011/08/19

讀書清單

從高中就開始寫程式,不過中途對設計感到興趣而沒有唸資訊相關的科系,工作後才開始想慢慢把之前遣漏的知識補回來,撰寫as到後來,發現除了熟悉語法本身外,還有許多的內功心法需要慢慢磨鍊,其實要讀的書單實在太多,整理一下目前需要深入讀的書吧。下面列出的書其實都是這些日子慢慢整理,看網路上的文章、書中介紹的經典的書籍,有興趣的可以慢慢看囉~(真的是慢~慢看...)
=程式設計=
  • The Art of Computer Programming
  • Software Engineering 軟體工程
  • 編程創藝ー編寫卓越程式碼
  • 重構ー改善即有程式的設計
  • 重構ー向範式前進
=物件導向=
  • 大話設計模式
  • 深入淺出設計模式
  • Design Pattern(四人幫)
  • ActionScript Design Pattern
  • PureMVC(Framework)
=資料結構與演算法=
  • Fundamentals of Data Structures in C
  • Introduction to Alogorithms
  • 大話資料結構
=其它=
  • 學徒模式
  • 編程的頂尖對話