最近といっても、数年前からだが、Webが熱い。ブラウザで地図アプリが動いたり、OSみたいなものが動いたり、最近ではオフィスみたいなソフトも動くようになっている。そこで、今回はその要素技術を少し紹介することにする。
情報を記述するHTML、XML。見た目を記述するCSS、情報を操作するXSLT、ページに動きをつけるJavaScriptなどを紹介する。
皆さんご存知のHTML。タグで文章を装飾します。
<なんとか></なんとか>という形式。
文章の「見た目」ではなく「意味」を表すために使われます。(ここは強調、ここは引用など)その見た目はブラウザに依存するが、後述するCSSを用いることで、見た目を指示することも出来る。
<html> <head><title>TestPage</title></head> <body> <h1>HTMLを書いてみる</h1> <p>pはパラグラフのP</p> <hr /> <!-- 水平線 これはコメント --> </body> </html>
HTMLで装飾されたものについて、その見た目を定義する。色、大きさ、背景、枠、etc...
同じHTMLでもCSSを変えることでまったく別の見た目にすることも出来る。
<html> <head><title>TestPage</title> <style> h1{ color:red; } p{ border:solid; background-color:#ffffdd; } </style> </head> <body> <h1>HTMLを書いてみる</h1> <p>pはパラグラフのP</p> <hr /> </body> </html>
個別の目的に応じたマークアップ言語群を創るために汎用的に使うことが出来る仕様である(wikipedia)。気分としてはHTMLのような書き方でもっと色々なものを記述するためのもの。
<DataSet> <Software> <title>Eclipse</title> <language>Java</language> </Software> <Software> <title>Linux</title> <language>C</language> </Software> <Software> <title>apt</title> <language>Perl</language> </Software> </DataSet>
XMLを変換する方法を定義するXML。XMLをHTMLに変換したりできる。
<? xml version=”1.0” encoding=”UTF-8” ?> <xsl:stylesheet version=”1.0” xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”> <xsl:output method=”html” encoding=”Shift_JIS” /> <xsl:template match=”/DataSet”> <xsl:for-each select=”./Software”> <xsl:value-of select=”title” />,<xsl:value-of select=”language” /> </xsl:for-each> </xsl:template> </xsl:stylesheet>
<? xml version=”1.0” encoding=”UTF-8” ?> <xsl:stylesheet version=”1.0” xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”> <xsl:output method=”html” encoding=”Shift_JIS” /> <xsl:template match=”/DataSet”> <html> <head><title>test page</title></head> <body> <xsl:for-each select=”./Software”> <h1><xsl:value-of select=”title” /></h1> <p><xsl:value-of select=”language” /></p> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet>
HTMLに「動き」を与えるもの。ブラウザで動作する唯一の言語。見た目は少しJavaに似ていて、名前にもJavaとあるが、「まったく別の言語」です。
for文とか使えます。document.write(“ほげほげ”) はdocumentクラスのwriteメソッド的なものを文字列を引数にして呼び出している。
<html> <head><title>TestPage</title></head> <body><script> for(i=0;i<10;i++){ document.write("<h1>"+i+":Hello World</h1>") } </script></body></html>
functionで関数を定義することが出来る。関数は普通はヘッダに定義する。
<html> <head><title>TestPage</title> <script> function sum(n){ x=0; for(i=1;i<=n;i++){ x+=i; } return x; } </script></head> <body><script> document.write(sum(10)); </script></body></html>
javascript:(alert(1+2+3+4))
実はブラウザのアドレスバーでも実行できる。
クリックすると文字を表示する。マウスを乗っけると色が変わる。などを実現できる。
オブジェクト.style.プロパティ名でCSSにアクセス出来る(プロパティ名が微妙に異なるので注意)
<html> <head><title>TestPage</title></head> <body> <input type="button" onclick="alert('Hello World')"> </body></html>
<html> <head><title>TestPage</title> <script> function over(obj){ obj.style.backgroundColor = 0xFF0000; } function out(obj){ obj.style.backgroundColor = 0xFFFFFF; } </script></head> <body> Point<span onmouseover=”over(this)” onmouseout=”out(this)”>Here</span>! </body></html>
var重要。varを付けずに変数を宣言するとグローバルスコープになる。
var x=”global”; function f(){ var x=”local”; alert(x); // local } alert(x); // global f(); alert(x); // global |
var x=”global”; function f(){ x=”local”; alert(x); // local } alert(x); // global f(); alert(x); // local!! |
関数の宣言や適応には何通りか書き方がある。
function hoge(){ alert(“hello”) } ----↑↓同じ意味------ var hoge = function(){ alert(“hello”) } |
hoge(); ------↑↓同じ意味----- hoge=function(){ alert(“hello”); }() |
関数を引数にすることが出来る。関数をreturnすることができる。
function calc(f,a,b){ return f(a,b); } add=function(x,y){ return x+y; } sub=function(x,y){ return x-y; } calc(add,5,1); // =>6 calc(sub,5,1); // =>4
function addn(n){ return function(p){return n+p}; } add1 = addn(1); add1(5) // => 6
avaやC++のようなオブジェクト指向とは少し趣きの違うものがJavaScriptにはある。 正直使わなくても書けるがまぁ紹介。
クラスとかインスタンスの区別はない。 あるのは全部「オブジェクト」
function Rectangle(w,h){ this.width = w; this.height = h; } r = new Rectangle(100,50); alert(r.width);new Rectangleとすると、新たに空のオブジェクトを作成し(便宜上aと呼ぶ)、Rectangle()の処理を実行する。この時thisはaをさすようにする。
オブジェクトはprototypeというプロパティを持っている。これはnewした時にそのオブジェクトの親となるオブジェクトを指すプロパティである。何も指示していないとObject.prototypeを指しており、そこにはtoStringなど基本的な操作が定義されている。
function Rectangle(w,h){ this.width = w; this.height = h; this.area = function(){ return this.width * this.height }; }
function Rectangle(w,h){ this.width = w; this.height = h; } Rectangle.prototype.area = function(){ return this.width * this.height };
駆け足でまとめましたが、これらの実験はエディタとブラウザさえあれば簡単に出きるのでぜひ遊んでみてください。