2008年3月21日 星期五

在 eclipse 中撰寫 script,並利用 script 控制 eclipse platform

  1. 下載 eclipse
  2. Help→Software Updates→Available Software 中加入 Europa Discovery Site 的下載網址: http://download.eclipse.org/releases/europa/
  3. 如下圖,在 Other Tools 中選取安裝 Eclipse Monkey
  4. 安裝完後,重新啟動 eclipse,應該會在選單列中看到一個新的選單:Scripts

參考

2008年1月3日 星期四

JavaScript 的 Hashtable 實作

JavaScript 的 Hashtable 實作
/*******************************************************************************************
 * Object: Hashtable
 * Description: Implementation of hashtable
 * Author: Uzi Refaeli
 *******************************************************************************************/
//======================================= Properties ========================================
Hashtable.prototype.hash   = null;
Hashtable.prototype.keys  = null;
Hashtable.prototype.location = null;

/**
 * Hashtable - Constructor
 * Create a new Hashtable object.
 */
function Hashtable(){
 this.hash = new Array();
 this.keys = new Array();
 this.location = 0;
}

Hashtable.prototype.keySet = function(){
 return this.keys;
}

/**
 * put
 * Add new key
 * param: key - String, key name
 * param: value - Object, the object to insert
 */
Hashtable.prototype.put = function (key, value){
 if (value == null)
  return;

 if (this.hash[key] == null)
  this.keys[this.keys.length] = key;

 this.hash[key] = value;
}

/**
 * get
 * Return an element
 * param: key - String, key name
 * Return: object - The requested object
 */
Hashtable.prototype.get = function (key){
  return this.hash[key];
}

/**
 * remove
 * Remove an element
 * param: key - String, key name
 */
Hashtable.prototype.remove = function (key){
 for (var i = 0; i < this.keys.length; i++){
  //did we found our key?
  if (key == this.keys[i]){
   //remove it from the hash
   this.hash[this.keys[i]] = null;
   //and throw away the key...
   this.keys.splice(i ,1);
   return;
  }
 }
}

/**
 * size
 * Return: Number of elements in the hashtable
 */
Hashtable.prototype.size = function (){
    return this.keys.length;
}

/**
 * populateItems
 * Deprecated
 */
Hashtable.prototype.populateItems = function (){}

/**
 * next
 * Return: true if theres more items
 */
Hashtable.prototype.next = function (){
 if (++this.location < this.keys.length)
  return true;
 else
  return false;
}

/**
 * moveFirst
 * Move to the first item.
 */
Hashtable.prototype.moveFirst = function (){
 try {
  this.location = -1;
 } catch(e) {/*//do nothing here :-)*/}
}

/**
 * moveLast
 * Move to the last item.
 */
Hashtable.prototype.moveLast = function (){
 try {
  this.location = this.keys.length - 1;
 } catch(e) {/*//do nothing here :-)*/}
}

/**
 * getKey
 * Return: The value of item in the hash
 */
Hashtable.prototype.getKey = function (){
 try {
  return this.keys[this.location];
 } catch(e) {
  return null;
 }
}

/**
 * getValue
 * Return: The value of item in the hash
 */
Hashtable.prototype.getValue = function (){
 try {
  return this.hash[this.keys[this.location]];
 } catch(e) {
  return null;
 }
}

/**
 * getKey
 * Return: The first key contains the given value, or null if not found
 */
Hashtable.prototype.getKeyOfValue = function (value){
 for (var i = 0; i < this.keys.length; i++)
  if (this.hash[this.keys[i]] == value)
   return this.keys[i]
 return null;
}


/**
 * toString
 * Returns a string representation of this Hashtable object in the form of a set of entries,
 * enclosed in braces and separated by the ASCII characters ", " (comma and space).
 * Each entry is rendered as the key, an equals sign =, and the associated element,
 * where the toString method is used to convert the key and element to strings.
 * Return: a string representation of this hashtable.
 */
Hashtable.prototype.toString = function (){

 try {
  var s = new Array(this.keys.length);
  s[s.length] = "{";

  for (var i = 0; i < this.keys.length; i++){
   s[s.length] = this.keys[i];
   s[s.length] = "=";
   var v = this.hash[this.keys[i]];
   if (v)
    s[s.length] = v.toString();
   else
    s[s.length] = "null";

   if (i != this.keys.length-1)
    s[s.length] = ", ";
  }
 } catch(e) {
  //do nothing here :-)
 }finally{
  s[s.length] = "}";
 }

 return s.join("");
}

/**
 * add
 * Concatanates hashtable to another hashtable.
 */
Hashtable.prototype.add = function(ht){
 try {
  ht.moveFirst();
  while(ht.next()){
   var key = ht.getKey();
   //put the new value in both cases (exists or not).
   this.hash[key] = ht.getValue();
   //but if it is a new key also increase the key set
   if (this.get(key) != null){
    this.keys[this.keys.length] = key;
   }
  }
 } catch(e) {
  //do nothing here :-)
 } finally {
  return this;
 }
};

2007年5月31日 星期四

口琴自學的相關網站

2007年4月13日 星期五

變數的宣告

JavaScript 的區域性變數通常是在函數中宣告,必須使用 var 宣告之;全域性變數則無須使用 var 宣告。

  • 區域性變數僅於所在函數中有效。
  • 全域性變數於該文件的所有 <script> 標籤中均有效。

範例:

<script>
var arms = 2   //arms是全域變數
legs = 2   //legs是全域變數
function init() {
 var heads = 1  //heads是區域變數
 eyes = heads * 2 //eyes是全域變數
}
init()
document.write("手臂有",arms,"隻<BR>")
document.write("腿有"+legs+"條<BR>")
document.write("頭有",heads,"個<BR>")
document.write("眼睛有"+eyes+"粒<BR>")
</script>

上例只會印出:

手臂有2隻
腿有2條

因為當執行到「頭有 1 個」的時候,JavaScript 會發生錯誤,而無法繼續執行下去!

  • 在函數外宣告的變數,無論是否使用保留字 var 宣告,均稱為全域變數。
  • 在函數內宣告的變數,如使用 var 宣告,則為區域變數;未使用 var 宣告,則仍視為全域變數。

function 定義

function 為結構化程式設計的基礎,定義的 function 代表一段副程式。利用關鍵字 function 宣告函式名稱。 function 函式名稱(引數) {敘述} 若有多個引數(argument),須用逗號隔開。引數的個數可以用以下變數來取得: 函數名稱.arguments.length 引數的值可以用以下變數取得: 函數名稱.arguments[x]