2011年7月25日月曜日

functionから(function( ){ })( ) へ

function(変数){動作処理}とは別に(function(){})()があります。これは古旗さんの「InDesign自動処理実例集」から引用しますと
各プログラム中でしようされている変数名などで共通のものがあるために、同時にサンプルプログラムを利用する際に干渉しないようにするためのものです。
初心者にとっては分かったような分からんような説明です。

(function( ){ })( ) と function( ){ }( )には 
function( ) { } が式ではなく、文として解釈されてしまう。
(function( ){ })( ) だと式になる。

var b = function() { } ()な記述も可能。
だとありますが、イマイチよく分かりません。

で、JavaScriptの先人たちのScriptを見ますと function と書いている人もいれば (function(){})() と書いている人もいます。functionと記述されたスクリプトは (function(){})() と書くこともできそうな予感。とりあえずチャレンジ。
var selObj = app. activeDocument. selection;

for (var i =0; i<selObj. length; i++)
{
KozG (i) ;
}

function KozG (No){
var tObj = app. activeDocument. selection[No];
tObj. paragraphs [0]. appliedFont = "小塚ゴシック Pro";
}
functionとforを流れで理解するに出てくる変数の前にvarを付けてませんでしたので修正。

varははじめて登場する変数の前につける約束事です。


とりあえず適当にやってみる^^
(function (){
var selObj = app. activeDocument. selection;
for (var i =0; i<selObj. length; i++)
{
var tObj = app. activeDocument. selection[i];
{
tObj. paragraphs [0]. appliedFont = "小塚ゴシック Pro";
}
}
})();
げっ、動いちまったぜ。。。思ったよりも簡単なのかもしれない。


(function( ){ })( )を分解してみる。

(function( ){処理リストの取得 {処理リスト {処理}} })( )
引数や関数が苦手な自分は function ⇔ (function( ){ })( ) にすることで慣れた方がいいのかもしれない。

人様の書いたスクリプトを読んでもfunctionやforが使われていると7-8行で頭が痛くなり、それ以上読めない。webや本に載っているものはfunctionやforが使われている。前回の日記にある
//テキストフレームの最初の段落書体を小塚ゴシックに変更する
var tObj = app. activeDocument. selection[0];
tObj. paragraphs [0]. appliedFont = "小塚ゴシック Pro";

tObj = app. activeDocument. selection[1];
tObj. paragraphs [0]. appliedFont = "小塚ゴシック Pro";

tObj = app. activeDocument. selection[2];
tObj. paragraphs [0]. appliedFont = "小塚ゴシック Pro";

tObj = app. activeDocument. selection[3];
tObj. paragraphs [0]. appliedFont = "小塚ゴシック Pro";
はお目にかかったことがない。しかし、ここが原点。


要は何をしたいか(ここではtObj. paragraphs [0]. appliedFont = "小塚ゴシック Pro";)。しかし、そこに辿り付くまでにエラー処理文などが入ってくると読んでいる途中で投げ出してしまう。

思い出すとアチキが最初に作ったperlはPDFに埋め込むことの出来ないATM版Dynaフォントが使われているデータを書き出したpsにPerlでCID版Dynaに置き換えて埋め込むようにしたものだった。

で、最初はs/ATM版Dynafont名/CID版Dyna名/g;とやり、正規表現が分からなかったので100書体以上のPS書体名を書いた。上の文でいえばtObj = app. activeDocument. selection[100];まで書いたと同じ。

var tObj = app. activeDocument. selection[0];
tObj. paragraphs [0]. appliedFont = "小塚ゴシック Pro";


が骨格、あとは肉付け。骨格をしっかり掴みさえすれば、肉付けは当人のレベルにあったやりかた(functionやforを使わない)から入ってもいいんじゃないかと思う。

0 件のコメント:

コメントを投稿