顯示具有 JavaScript 標籤的文章。 顯示所有文章
顯示具有 JavaScript 標籤的文章。 顯示所有文章

2018年9月25日 星期二

JavaScript的函數是傳值還是?

程式寫久了,不同的程式語言間除了語法不同外,感覺好像都差不多,除了各程式語言特別強調的功能。所以現在接觸到新的程式語言已經沒有特別的學習動力,都是安裝好執行環境、瞄一下範例就動手寫寫看,除非有特別的需求,已經很少去把程式語言的學習手冊掃一遍。要說沒有好好學習是一種錯,但人性卻總是常常這樣!

最近在寫程式時就出現一些需要釐清的觀念,到底JavaScript的函數呼叫是傳值(Call By Value)還是傳參考(Call By Reference)?之前因為都沒有需要針對傳入的參數進行修改,所以就沒有在意這個問題。


題外話,以前學C語言時,傳值/址可說是搞死不少人,&、*這兩個符號在C語言裡是用的最兇的。回想起來,C語言並沒有所謂的傳參考,因為送到函數之前就要取位址,收參數的函數就要用對應的資料型態記錄位址。雖然是很惱人的語法,但了解用法的人就會覺得這種語法的迷人之處。從硬體控制的角度來說,傳址仍舊是相當實用的語法。

2011年11月1日 星期二

Rhino環境應用Java的URL類別抓取網頁資料

前篇「應用readUrl函數取得網頁資料」使用的是Rhino環境提供的函數readUrl()抓取網頁資料,算是方便又簡單的抓取網頁資料方法,這篇改以呼叫Java的URL類別實作抓取網頁資料的作法。
其實會想自行改用Java的URL類別抓取網頁連線,主要是看到這篇文章「java HttpURLConnection來實作get及post動作」的範例與說明,該文章同時介紹了GET與POST方法;GET部份其實用函數readUrl()就可以達成,但POST部份就沒看到Rhino環境有提供適用的函數,看來要想辦法自行設計,剛好「借」該篇文章的程式碼來改看看。

2011年10月29日 星期六

應用readUrl函數取得網頁資料

抓取網頁資料在程式設計討論區中可說是常被提及的問題,在之前的「利用WSH環境的JScript抓取網頁資料」文章中,就已經試過抓取網頁資料。現在換到Rhino環境下,也用這個課題來實作一下。
WSH環境下,採用的是Microsoft.XMLHttp物件抓取網頁資料;轉換到Rhino環境下,當然沒有這樣的物件。只是Rhino可以應用Java的物件,所以要達到抓取網頁的功能當然也可以透過呼叫Java的物件來完成。不過殺雞焉用牛刀,Rhino環境即提供函數readUrl()可以抓取網頁資料,已足夠用來抓取一般的網頁資料。

2011年10月28日 星期五

應用readFile函數讀取檔案

在之前的「Rhino運用Java物件的方式」、「Rhino運用Java物件讀寫UTF-8文字檔案」文章裡頭都是在Rhino環境下載入Java的FileReaderInputStreamReader物件進行讀取檔案的功能;後來再回到Rhino官網才發現,原來Rhino環境已經提供函數readFile()讀取檔案,且可藉由指定引數來讀取不同編碼格式的檔案。

2011年9月15日 星期四

應用load函數載入共用的程式碼

對於經常共用的程式碼,撰寫成獨立的檔案後再提供給主程式載入呼叫,是再平常不過的作法(其實這也是必要的,重複程式碼的存在表示日後維護上的可怕夢靨)。
Rhino環境下是透過load()函數載入外部JavaScript程式碼,載入的語法可以採用絕對路徑與相對路徑的方式;這樣一來,可以考慮將共用的JavaScript程式碼統一放置在固定目錄下,採用絕對路徑的方式載入共用的程式碼。
雖然採用絕對路徑的方式可以達到共用程式碼只需要一份的目的,但在不同電腦上使用時,就必須建立該路徑(不然就是要修改程式碼內的路徑字串),若是再考量作業系統的差異,使用絕對路徑有時不見得是方便的方式。有鑑於此,我還是習慣使用相對路徑的方式,在「整合Portable Notepad++的Rhino執行環境」設計的批次檔中,就加入工作路徑切換,目的就是方便load()函數使用相對路徑指定共用的JavaScript程式碼。只是這樣一來,變成在每個設計工作的目錄下都必須複製乙份這些共用的程式碼;而且當共用的JavaScript程式碼有修改時,如何維持這些共用JavaScript程式碼保持一至也是一個需要留意的問題。

2011年8月28日 星期日

整合Portable Notepad++的Rhino執行環境

在之前的「應用jPortable軟體架設Rhino執行環境」文章中,運用批次檔的方式簡化輸入指令的步驟,再加上這陣子寫一些小程式的經驗,這樣的方式雖不滿意但還算可以接受。最近在PortableApps網站上下載Notepad++ Portable版本試用(越來越喜歡這種綠色軟體架構,簡單又方便使用),偶然的狀況下發現Notepad++提供的「執行」功能加上之前設計的批次檔,就可以直接在Notepad++的環境下直接執行正在編輯的Rhino JavaScript檔案。
加入這樣的調整,純粹只是為了方便。不過有些簡單又方便的使用方式,所能節省的時間也是很可觀的。許多很棒的整合開發平臺就是為了讓程式設計過程更加的方便,才深受許多人接受並使用;只是Rhino好像不是很受關愛,可以找到的資源並不太多,就更不敢指望有人會為了它提供方便好用的開發環境 @_@"

2011年8月23日 星期二

Rhino環境的BIG5toUTF-8編碼轉檔程式

既然已經可以讀/寫"BIG5"編碼格式與UTF-8編碼格式的文字檔,要完成BIG5轉UTF-8檔案轉碼功能的函數就只要拼湊前面用到的Java物件就行了。這篇文章只是純粹整理前面用到的程式碼,如果有人不小心看到這篇,就不用浪費時間往下再看了 @..@

2011年8月21日 星期日

指定Rhino環境的DOS視窗編碼格式

Rhino環境下,使用print()函數會將訊息輸出至DOS的console視窗,在上一篇「Rhino原始碼使用UTF-8編碼格式儲存與執行」執行的結果中,雖然將訊息顯示在console視窗,但顯示結果已變成亂碼。
回頭再看一遍「JVM 預設編碼」這篇文章,雖然藉由"-Dfile.encoding"指定JVM預設編碼,讓"UTF-8"編碼格式的JavaScript檔案可以被載入與執行,但同時也將輸出至console視窗的編碼也指定成"UTF-8"編碼格式,造成顯示結果變成亂碼。而在「JVM 預設編碼」內容也提到解決辦法,不過之前沒把整篇文章看懂,所以只解決一半的問題。

Rhino原始碼使用UTF-8編碼格式儲存與執行

你的原始碼是什麼編碼?」介紹Java與C語言原始碼存檔的編碼格式、編譯方式、執行結果,其中介紹到的BOM相當詳細;只是我在使用"UTF-8"編碼格式存文字檔時,都是習慣使用檔首無BOM的方式,剛好沒遇到該文提到的問題^_^
JVM 預設編碼」介紹的應該可以解決「Rhino的原始檔編碼格式?」文章中遇到無法執行"UTF-8"編碼格式儲存的Rhino JavaScript。既然Rhino環境使用Java語言開發,自然要由JVM(Java Virtual Machine)啟動。在XP/Vista環境下預設的是"BIG5"編碼格式,所以造成"UTF-8"編碼格式的JavaScript檔案無法順利讀取。

2011年8月20日 星期六

Rhino的原始檔編碼格式?

只要跟編碼格式扯上關係,有些簡單的問題變得就不簡單了~_~
在中文系統中,編碼始終都是程式設計中相當讓人討厭的一部份。前面試過在Rhino環境下讀寫"UTF-8"編碼格式的文字檔案,結果看來還正確。那麼,如果Rhino的JavaScript檔案使用"UTF-8"編碼格式的話?特別是要程式內夾雜中文字串時?

Rhino運用Java物件讀寫UTF-8文字檔案

在前一篇「Rhino運用Java物件的方式」中,試著在Rhino環境下使用Java物件進行檔案的讀/寫功能。但在處理其它檔案時發現,無法讀取UTF-8編碼格式的文字檔(廢話 ~_~)。上網翻一下,如果要讀/寫"UTF-8"編碼格式的文字檔,就要在開啟檔案時指定編碼方式。
底下二篇文章對於編碼的說明比較清楚,提供參考:

2011年7月29日 星期五

Rhino運用Java物件的方式

這陣子花了點時間試著用Rhino開發程式,雖然還沒有很習慣Rhino與Java互動的方式,但在一連串的錯誤嘗試與測試過程中,發現Rhino還滿符合我想要的工具。熟悉JavaScript程式語言語法是最主要目的,但如果可以實際用來解決日常的工作需求,這樣就不算白費時間了。
有關Rhino使用Java packages、classes的方式,可以參考官網Scripting Java的說明。透過運用Java物件,就可以採用JavaScript的語法處理本機電腦上許多的工作(就像Windows提供JScript語言的方式)。若是將Java的JVM(Java Virtual Machine)當作一項優點,也許在「理想狀況」下,也可以將Rhino平臺所撰寫的JavaScript程式達到Wirte Once Run Anywhere的目標。

2011年2月11日 星期五

應用jPortable軟體架設Rhino執行環境

Rhino是用Java語言開發的JavaScript語法應用程式(因為Rhino好像不只是JavaScript直譯器?),也就是說必須在已安裝JRE(Java Runtime Environment)的環境下才能啟動Rhino,然後才能執行JavaScript語法。

以目前Java的普及率來說,電腦上沒有安裝JRE(Java Runtime Environment)環境的狀況應該算少見了。但是,如果遇到沒有辦法安裝JRE(Java Runtime Environment)環境的情形,可以考慮「使用」PortableAppsjPortable。「使用」,不是「安裝」,PortableApps提供軟體的宗旨就是為了可以方便使用者將程式安裝在USB上帶著到處走,所以該網站所提供的軟體都可以自行解壓縮後即可執行,不需要進行安裝程序(即所謂的綠色軟體)。

既然有jPortable這樣的軟體,就可以建立一個獨立而完整的Rhino執行/開發環境(意即不論Windows作業系統有沒有安裝JRE(Java Runtime Environment)環境都可以執行Rhino)。

2011年2月9日 星期三

Rhino的f選項與命令列參數衝突與解決方法

在前一篇的「Rhino執行環境設定」的內容中提到使用「f」選項載入獨立的JavaScript程式碼檔案併執行,若只有載入JavaScript程式碼來執行,使用上並沒有問題。但是,如果要傳送命令列的參數時,卻出現了問題‧‧‧至少目前的Rhino 17R2的版本是有問題的‧‧‧

本機程式語言工具(例如C、Delphi等),如果開發的是Console型態的程式,那麼命令列(Command Line)參數就是應該具備的功能,讓程式可以依傳入參數的不同來決定運作的方式。Rhino自然也有考慮到這個需求,提供arguments預設屬性(Predefined Properties),用來取得命令列的(Command Line)參數。

2011年1月29日 星期六

Rhino執行環境設定

有關Rhino執行環境的介紹,可以參考以下兩篇文章的說明:
既然是JavaScript for Java,當然要先將Java Runtime Environment(JRE)安裝好;而Rhino的相關執行程式已經被封裝在js.jar檔案中,因此只需要在CLASSPATH環境變數加入js.jar檔案,就算是完成環境設定。換個角度來看,就是將Rhino視為一個Java的獨立應用程式,只是這個應用程式可以用來執行JavaScript程式語法。

2011年1月28日 星期五

Rhino: JavaScript for Java

JavaScript本質部份」是良葛格網站上介紹JavaScript程式語言的一系列文章,從基礎的資料型態解說到Ajax的觀念與應用,都有詳細的範例跟說明,是一個很棒的參考資料。在該系列的文章中,除了看到介紹JavaScript程式語言的講解,另一個讓我感興趣的東西是─Rhino

有關Rhino的詳細資料,請參考Rhino官網上的說明,簡單來說就是一個採用純Java程式語言開發的JavaScript直譯器;但是功能不僅僅只是JavaScript程式語言的直譯器,其延伸功能是可以用來存取Java的packages和classes(請參考「Accessing Java packages and classes」)。

2011年1月13日 星期四

在WSH環境下呼叫Office Word的Check Spell功能

拼字檢查(Check Spell)是Microsoft Office Word提供的一項功能,用來檢查文章內是否輸入錯誤的字(句)。雖然看來是相當實用的功能,但我從來都沒有使用過這個功能;英文破到一個不行的我,最多也只會打How are you? I'm fine, thank you.這樣的英文句子,實在是用不到這樣的功能‧‧‧

英文破歸破,但還是不能放棄看懂英文的企圖心,待在程式設計領域中,大部份說明文件依舊是英文,就算不會寫也要會看。在「JScript 程式設計與應用:WSH」看到這個範例時,就手癢的試了一下,順便記錄下來。相信看久了,總有一天我也能寫一些些英文說明文件滴,這樣的功能就會用的上了,哇哈~

2011年1月8日 星期六

在WSH環境下傳遞字串資料至剪貼簿(Clipboard)

剪貼簿(Clipboard)是作業系統啟動後就存在的功能,檔案的移動、資料的複製/貼上等動作都是透過剪貼簿(Clipboard)暫存,目的應用程式就可取得剪貼簿(Clipboard)內的資料。這樣的功能提供使用者可以在各應用程式間共享資料,可說是一項相當棒的設計。

雖然這是一項相當棒的功能,但即使在程式設計過程中,也很少會使用程式碼操作剪貼簿(Clipboard)的內容,因為用程式把資料放進去之後‧‧‧再自己用程式將資料取出來?似乎挺奇怪的。作法上都是向作業系統請求一塊記憶體空間(malloc),然後再自行存取這塊記憶體的內容,讓需要共用的資料可以在程式內自由的存取(真的很自由,通常也很容易出狀況)。

但是在WSH(Windows Script Host)環境下,想要分享資料應該是沒辦法透過向作業系統請求一塊記憶體空間(除非自己另外設計ActiveX元件),資料的交換通常都是存成檔案後再呼叫其它應用程式來存取。在「JScript 程式設計與應用:WSH」提供的範例程式碼中,發現到這個相當有趣的用法,可以用來將資料送到剪貼簿(Clipboard)中,可說是另外一種資料共用的方式。

2011年1月3日 星期一

WSH環境下操作其它應用程式─筆記本

這個範例是從「JScript 程式設計與應用:WSH」提供的程式碼中發現的,算是個滿‧‧‧少用的功能?!說真的,一開始看到這個範例只是覺的新奇,實在想不出來這樣的功能可以用在哪?

2010年12月30日 星期四

在WSH環境下存取Access資料庫─使用ADODB物件

上一篇文章「在WSH環境下存取Access資料庫」中,使用組合SQL語法的方式將資料寫進資料庫,但這樣的方式在資料欄位數量較多時,是種相當痛苦的處理方法。

這篇嘗試使用ADODB.RecordSet物件來跟資料庫打交道,雖然以前只用過Delphi程式語言設計資料庫軟體,好在ADODB物件的用法差異並不會太大,語法、結構也都很類似(就是開資料庫連線、建立資料集、最後記得關閉資料庫連線‧‧‧等等),參考網路上的一些資料後,就試著動手寫寫看。