2011/07/04

Data 2 & Data 3 (processing教學)

古人說"人有悲歡離合,月有陰晴圓缺",這絕對是經驗智慧的傳承,
白話點講就是人生總會有起起伏伏,這也同理可證在processing的學習上面.
因為接下來的p101-109我們完全不會畫出半張圖,
同時這是我看到現在編排最亂的一篇,
而且重點是非常瑣碎而且你會不知道懂這些是幹麻的.

我努力的看完,但我只能寫出類似導讀的東西,
至於以後可以拿來幹麻?作者在最後寫了大概要到p395時才會比較常用到,
我看到時候可能早就記憶不清了,所以這兩篇的Data 2跟 Data 3請務必拿書籤標起來,
以後應該會用到(但也要我有撐到p395,哈哈哈哈哈哈哈哈哈哈)
anyway,讓我們玩文字遊戲玩到死吧  :-x

---------------------------------------------------------------------------------------

首先p101-104的Data 2只講兩件事情,char和String

char是character的縮寫,顧名思義就是符號的意思,
這些符號可能是大小寫的英文字或是標點符號,甚至是一些我們沒看過的
而當這些文字符號被定義為char時,基本上它們都會有一個代表的數字,
詳情可以查p665的表來了解.

char其實跟float或int一樣,當你用它時,你就要定義一個代號給它,

char hello = 'C'; //意思是今天我要把hello定義為符號C,記得一定要把符號寫在'   '內
println(hello); //它會告訴你為hello現在代表C

int j = hello;
println(j);
//還記得剛剛我們有說每個符號都有一個數字代碼嗎?
//當你翻到p665查大寫的C時,你會看到它旁邊的數字為67
//因此當你把hello(符號C)當成一個數來對應int時
//它會告訴你j = 67

讓我們看p103,char最後的範例

char letter = 'A';  //定義letter為符號A

for(int i = 0; i < 26; i++){ //看它for loop的寫法就知道是要把26個大寫字母寫出來
  print(letter); //當用print時,直接把算出來的東西都擠在一行,如果打println的話,則會每一字母各自一行
  letter ++; //因為我們知道符號已經可以被當成數字,所以你也可以看成letter = A = 65,然後每次+1, 66 = B, 67 = C
}

println('.'); //最後在A-Z後面加句點,其實可有可無

//最後你就會看到ABCDEFGHIJKLMOPQRSTUVWXYZ. 



當char被視為單一個體時,String就字如其名代表著一串東西,
可能是一堆字母數字,或是一長串句子.
相較於char開頭是小寫,且要把東西寫在'  '裡面,
String開頭則是要大寫,且是把東西寫在"  "裡頭.

但其他規則基本上跟char所差無幾,只是就沒有符號的概念了
簡單的範例如下


String aa = "Hello,"; //意思是把aa定義為"Hello,"
String bb = " I'm Tien."; //意思是把bb定義為" I'm Tien.",注意我有空格,因為string內也會讀空格的
String cc = aa + bb; //意思是把cc定義為把aa跟bb連起來
println(cc); //因此當我print時會看到這句子 Hello, I'm Tien.

Data 2大概就是在講這些囉.

---------------------------------------------------------------------------------------

Data 3 : Conversation, Objects
則是非常亂的一章,其中有幾個我會跳過不講,因為它的觀念在後面才會提到.
就讓我們一頁一頁理解吧,

第一小篇的Data Conversation是在說不同的資料在互相轉換時要怎麼用語法達成.
例如int轉float,或是float轉String,或String轉char等等.


p105下面12-01在說的基本上是在講
int可以透過語法轉為float,但是float無法轉為int,因為int不存在所謂的小數點


p106的12-02,boolean是一個拿來定義true或false的指令,
可以透過輸入字或是數值來決定結果,

int i = 0; //靠數值來定義的話只需知道除了0為false之外,其他正負數皆為true
boolean b = boolean (i);
println(b); //得false

String s = "true"; //直接將String內設為true
boolean u = boolean (s);
println(u); //得true


p106的12-03,byte我會跳過不講,因為它的定義方式滿奇怪的,
甚至可以說為什麼要有這種定義方式?請自行參詳,
把頁數記起來,也許以後我們會恍然大悟.


12-04,12-05,12-06跟12-07不是已經介紹過的char跟String,
就是早就知道的float跟int,所以就不多說了,
唯一稍有不同的是在轉換data時,String會縮寫成str()



第二小篇的Objects則是在說有些指令其實是object的一種,
因為它旗下會有一些變數,因此這些變數讓指令不俱單純性質,
例如我們前面學的PImage,它裡面就有長跟寬兩個變數,
因此它也算object指令的一種,同時String跟PFont(下一篇才會提到,這篇就出現...)也是.

因為有這些變數,所以延伸出了一些可以處理這些變數(variables)的特殊功能(function).
而特殊功能通常只有特定的某種object才有.
這些指令只要透過object.variablesobject.function
中間的句號(.)是告訴processing執行某object內的變數或特殊功能


p107的12-08就是在講如何抽出PImage的變數,
我們拿上一篇zoey的照片為例,記得也要把照片丟到資料夾內

PImage img = loadImage("zoey.jpg"); //導入圖片資料
int w = img.width; //透過變數width來得知圖片的寬
int h = img.height; //透過變數height來得知圖片的高
println(w); //得198
println(h); //得254



再來的p108-109都是在講String下的function,以下 
___.length() 
___.startsWith() 
___.endsWith() 
___.charAT() 
___.toCharArray()  這不會講,因為array到p301才會提到..........
___.substring() 
___.toLowerCase() 
___.toUpperCase() 
___.equals()

讓我們固定三個String,之後就可以慢慢檢驗這些String獨有地特殊功能

String a = "Terence Tung";
String b = "Terence Tung";
String c = "Terry Tung";


println(a.length());
//12, 因為包含空格在內共12字元,所以長度會得到12

println(a.startsWith(T));
//true, 只要從頭算起順序對,輸入T或Ter或Terence都會得true,反之則否

println(a.endsWith(ung);
//true, 只要從尾算起順序對,輸入g或ung或e Tung都會得true,反之則否

println(a.charAT(5));
//c, 從String中抽出某個字母或數字,0為T,因此5為c,7為空白

println(a.substring(3));
//ence Tung, 決定第幾位開始與結束來定義新的String,因為沒填尾數,所以直接到底

println(a.substring(4,10));
//nce Tu, 比較奇怪的是它定義是當你有給尾數時,它會算4-9,10不算,沒為什麼,就這樣子


println(a.toLowerCase());
//terence tung, lowercase就是小寫的意思,代表所有字母都變小寫

println(a.toUpperCase());
//TERENCE TUNG, uppercase就是大寫的意思,代表所有字母都變大寫

println(a.equals(b));
//true, 檢視String a跟String b內容,大小寫與長度是否相同
//同時作者有特別提到為什麼會有equals這個指令而不能單純用println(a == b);就好
//他是說因為用==比object只會比存取點是否相同而不會比實際內容
//我不太懂其中含意,要問CCC之後才有解答 

println(a.equals(c));
//false, 檢視String a跟String c內容,大小寫與長度是否相同



打完了,有看懂就好,但我覺得這篇得搭配著課本看,應該會比較清楚,
雖然還不知道要幹麻 ................ 也許下一篇Typography 1會用到一些吧 ........




Try it. :)

沒有留言:

張貼留言