関数
関数の種類の違い
宣言型の関数は宣言が出てきたときに構文解析される。Functionコンストラクタを使用した場合、動的に関数が生成されて実行のたびに毎回解析される。関数リテラルを使用した場合、一回だけ。(そもそもFunctionコンストラクタって使ったことなかった)
var foo = function fooName() { }; と名前付きでリテラル関数にすると、再帰する時に名前で呼べる。無名関数の時はcalleeを使って再帰する。
クロージャ
関数内関数。クロージャは外側の関数で定義された変数にアクセス出来る。外側の関数が内部の関数を戻り値で返したりしても、外側にあった関数がスコープを持ってた変数は使用できる。
function(x, y) { function addValue() { return (x +y); } return addValue; }
addValueがreturnされた後でもx,yは値を保持している。キャッシュに使ってる記事があったなーと思って調べたらPythonの話だけど http://satoshi.blogs.com/life/2009/11/python-hack.html にあった。PHPでも使えて、コードサンプルは http://phpspot.org/blog/archives/2010/10/php53.html こんな感じ。
変数宣言のあたり
一つの動詞で表しにくいと感じたら機能が多すぎるから分割する事を考える。
一個の関数にいろんな事をさせようとするとテストが出来ないし関数が長くなる。
基本的なとこだけど、機能が多すぎないかどうかの指針として一つの動詞でその関数が表現できるかという事を意識したいと思った。
■
javaScriptを基礎から勉強したくて初めてのJavaScriptを読んだので、思ったことを箇条書きにまとめときます。
CakePHPでMongoDBを使ってみる
CakePHPでMongoDBが動くまで
CakePHP側の準備
WEB ROOT
/var/www/html
CakePHPを取得
/var/wwwにlibを作成
libでCakePHPを取得
git clone git://github.com/cakephp/cakephp1x.git
ブランチを1.3に切り替え
git checkout origin/1.3
これでCakePHP1.3がlibにインストールされた状態。
appを公開用フォルダに移動
(本番はWebrootだけ移動するのが望ましい)
cp /var/www/lib/cakephp1x/app /var/www/html/projectname
webrootのindex.phpのパスの定義を修正
ROOT, APP_DIR, CAKE_CORE_INCLUDE_PATHの内容を実際の構成に合わせて変更
if (!defined('ROOT')) { define('ROOT', DS.'var'.DS.'www'.DS.'html'); } if (!defined('APP_DIR')) { define('APP_DIR', 'projectname'); } if (!defined('CAKE_CORE_INCLUDE_PATH')) { /* define('CAKE_CORE_INCLUDE_PATH', ROOT); */ define('CAKE_CORE_INCLUDE_PATH', DS.'var'.DS.'www'.DS.'lib'.DS.'cakephp1x'); }
MongoDBのインストールと起動はここを参照。
http://d.hatena.ne.jp/camelmasa/20100222/1266798151
起動スクリプトなど作成するならここを参照。
http://www.ihpsystem.com/blog/196
PHPからMongoDBを操作するためのライブラリをインストール
pecl install mongo
php.iniにextension=mongo.soを追加
(php.iniにコメントでextentionを入れるための場所が定義されてるので、そのあたりに追加)
MongoDB-Datasourceをインストールする
app/plugins/に移動
git clone git://github.com/ichikaway/mongoDB-Datasource.git
mongoDB-Datasourceに本体がダウンロードされるので、ディレクトリ名をmongodbに変更する
app/config/database.phpを編集
var $mongo= array( 'datasource' => 'mongodb.mongodbSource', 'database' => 'test', );
あとはDB側で$mongoを使用するように設定する。
もしくはdatabase.phpのdefaultをmongoDBの定義にしても良し。
mongodbのデフォルトポートは27017