<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Jaros&#322;aw Zabie&#322;&#322;o - BLOG: JavaScript idzie w dobrym kierunku</title>
    <link>http://blog.zabiello.com/articles/2006/11/13/javascript-is-cool</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>moje notatki, linki, komentarze</description>
    <item>
      <title>JavaScript idzie w dobrym kierunku</title>
      <description>&lt;p&gt;Musz&#281; przyzna&#263;, &#380;e od czasu grzebania w bibliotece &lt;a href="http://prototype.conio.net/"&gt;Prototype&lt;/a&gt; spojrza&#322;em w troch&#281; &#347;wie&#380;y spos&#243;b na j&#281;zyk JavaScript. Prototype jest przyk&#322;adem tego, jak bardzo elegancki, dynamiczny i obiektowy kodu mo&#380;na pisa&#263; w tym j&#281;zyku. Pozwala te&#380; na pisanie bardzo eleganckiego kodu mocno &lt;a href="http://encytemedia.com/blog/articles/2005/12/07/prototype-meets-ruby-a-look-at-enumerable-array-and-hash"&gt;przypominaj&#261;cego j&#281;zyk Ruby&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Np. poni&#380;szy kod wy&#347;wietla cztery razy okienko alertu. (Odpowiednikiem bloku kodu (ang. closure) w Ruby jest tu anonimowa funkcja).&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="number"&gt;4&lt;/span&gt;&lt;span class="punct"&gt;).&lt;/span&gt;&lt;span class="ident"&gt;times&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;function&lt;/span&gt;&lt;span class="punct"&gt;()&lt;/span&gt; &lt;span class="punct"&gt;{&lt;/span&gt;
  &lt;span class="ident"&gt;alert&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;JavaScript is cool&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;)&lt;/span&gt;
&lt;span class="punct"&gt;});&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Co ciekawe, w JavaScript (podobnie jak Ruby) mo&#380;na przeci&#261;&#380;a&#263; wszystkie obiekty. Np. poni&#380;ej do klasy Array dodano metod&#281; inArray.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="constant"&gt;Array&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;prototype&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;inArray&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;function&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;needle&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="punct"&gt;{&lt;/span&gt;
  &lt;span class="keyword"&gt;for&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;var&lt;/span&gt; &lt;span class="ident"&gt;key&lt;/span&gt; &lt;span class="keyword"&gt;in&lt;/span&gt; &lt;span class="ident"&gt;this&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="punct"&gt;{&lt;/span&gt;
    &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;this&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="ident"&gt;key&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt; &lt;span class="punct"&gt;===&lt;/span&gt; &lt;span class="ident"&gt;needle&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="punct"&gt;{&lt;/span&gt;
      &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="constant"&gt;true&lt;/span&gt;
    &lt;span class="punct"&gt;}&lt;/span&gt;
  &lt;span class="punct"&gt;}&lt;/span&gt;
  &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="constant"&gt;false&lt;/span&gt;
&lt;span class="punct"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;JavaScript posiada te&#380; wbudowany operator do wyra&#380;e&#324; regularnych. Np. poni&#380;szy kod sprawdza poprawno&#347;&#263; pola w formularzu:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_html "&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
//&amp;lt;![CDATA[
var MyForm = {
  validateEmail: function() {
    if ($F('email_id').match(/^.+?@([\w\d\.-]+?\.\w{2,5})\s*$/)) {
      $('email_error').innerHTML = '';
      return true;
    } else {    
      $('email_error').innerHTML = 'Wrong email format!';
      return false;
    }
  },
  validateForm: function() {
    return this.validateEmail() ? true: false;
  }
};
//]]&amp;gt;
&amp;lt;/script&amp;gt;
&amp;lt;form action=&amp;quot;&amp;quot; method=&amp;quot;post&amp;quot; onsubmit=&amp;quot;return MyForm.validateForm()&amp;quot;&amp;gt;
  &amp;lt;table border=&amp;quot;0&amp;quot; id=&amp;quot;container&amp;quot;&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;th&amp;gt;&amp;lt;label for=&amp;quot;email_id&amp;quot;&amp;gt;Email Adddress:&amp;lt;/label&amp;gt;&amp;lt;/th&amp;gt;
      &amp;lt;td&amp;gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;email_id&amp;quot; onchange=&amp;quot;MyForm.validateEmail()&amp;quot; /&amp;gt;
        &amp;lt;span id=&amp;quot;email_error&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;
      &amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;td colspan=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;input id=&amp;quot;submit&amp;quot; type=&amp;quot;submit&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
  &amp;lt;/table&amp;gt;
&amp;lt;/form&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Jakby tego by&#322;o ma&#322;o, JavaScript w nadchodz&#261;cej &lt;a href="http://developer.mozilla.org/en/docs/New_in_JavaScript_1.7"&gt;wersji 1.7&lt;/a&gt; przejmuje troch&#281; wygodnej sk&#322;adni Pythona!&lt;/p&gt;


	&lt;p&gt;Szkoda, &#380;e taki popularny &lt;span class="caps"&gt;PHP&lt;/span&gt; wzoruje si&#281; na brzydkiej sk&#322;adni Perla,  C++ i Javy. JavaScript wybra&#322; sobie znacznie bardziej eleganckie wzorce.&lt;/p&gt;</description>
      <pubDate>Mon, 13 Nov 2006 17:56:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:c009fda8-0967-4000-845a-d56fd7e6d86a</guid>
      <author>Jaros&#322;aw Zabie&#322;&#322;o</author>
      <link>http://blog.zabiello.com/articles/2006/11/13/javascript-is-cool</link>
      <category>javascript</category>
      <category>prototype</category>
    </item>
    <item>
      <title>"JavaScript idzie w dobrym kierunku" by blas</title>
      <description>&lt;p&gt;Jeszcze nie sprawdza&#322;em, bo mam tu troche rzeczy na wierzchu, ale co&#347; tam jest jeszcze na rzeczy z czasem na serwerze chyba. Tak jak by&#347; mia&#322; ju&#380; 20 listopada.&lt;/p&gt;</description>
      <pubDate>Fri, 17 Nov 2006 20:36:13 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:42aad50e-7e11-4c96-9252-01ebf4398be5</guid>
      <link>http://blog.zabiello.com/articles/2006/11/13/javascript-is-cool#comment-292</link>
    </item>
    <item>
      <title>"JavaScript idzie w dobrym kierunku" by Jaros&#322;aw Zabie&#322;&#322;o</title>
      <description>&lt;p&gt;FF si&#281; wywali&#322; pewnie przez aplet Javy (z polchatu). Wywali&#322;em go. Powinno pom&#243;c.&lt;/p&gt;</description>
      <pubDate>Fri, 17 Nov 2006 17:52:25 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:4556ccb2-b96d-4304-91df-44609a60680a</guid>
      <link>http://blog.zabiello.com/articles/2006/11/13/javascript-is-cool#comment-291</link>
    </item>
    <item>
      <title>"JavaScript idzie w dobrym kierunku" by blas</title>
      <description>&lt;p&gt;Jeszcze co&#347;,
czy jest jaki&#347; problem z czasem na serwerze? Przy moim po&#347;cie widnieje 3 days later, a postowa&#322;em 1 minut&#281; temu.&lt;/p&gt;</description>
      <pubDate>Fri, 17 Nov 2006 10:29:28 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:a71e2cd6-0575-4e4b-a137-9da8879f8957</guid>
      <link>http://blog.zabiello.com/articles/2006/11/13/javascript-is-cool#comment-290</link>
    </item>
    <item>
      <title>"JavaScript idzie w dobrym kierunku" by blas</title>
      <description>&lt;p&gt;Cze&#347;&#263;, troch&#281; nie na temat,
ale pr&#243;bowa&#322;em klin&#261;&#263; na g&#243;rze w &lt;a href="http://zabiello.com/contact" rel="nofollow"&gt;http://zabiello.com/contact&lt;/a&gt; i m&#243;j FF v.2.0 po prostu zaliczy&#322; zwieche.&lt;/p&gt;


	&lt;p&gt;Po odtworzeniu sesji przegl&#261;darki by&#322;o to samo. Dopiero jak z pliku sesji wykasowa&#322;em Twoj&#261; stron&#281; wszystko posz&#322;o ok, wi&#281;c chyba co&#347; z tym contact jest nie tak&lt;/p&gt;</description>
      <pubDate>Fri, 17 Nov 2006 10:28:07 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:a741a9f2-8f42-4bc9-bdbd-a3dc05b3c92d</guid>
      <link>http://blog.zabiello.com/articles/2006/11/13/javascript-is-cool#comment-289</link>
    </item>
    <item>
      <title>"JavaScript idzie w dobrym kierunku" by rsz</title>
      <description>&lt;p&gt;Korekta: blok kodu to nie to samo, co closure. Blok kodu jest poj&#281;ciem specyficznym dla (m.in.) Ruby&amp;#8217;ego, a closure to domkni&#281;cie, zasadniczo technika implementacji (chocia&#380; cz&#281;sto nadu&#380;ywane jako synonim) zagnie&#380;d&#380;onych, dynamicznych zakres&#243;w leksykalnych (np. funkcji).&lt;/p&gt;


	&lt;p&gt;BTW zawsze uwa&#380;a&#322;em, &#380;e JS to &#322;adny, niedoceniony j&#281;zyk.&lt;/p&gt;


	&lt;p&gt;A s&#322;abo&#347;&#263; PHP IMHO wynika g&#322;&#243;wnie z beznadziejnej semantyki (por&#243;wnania np., to wo&#322;a o pomst&#281; do nieba) i biblioteki standardowej (totalny &#347;mietnik, do tego wszystko w jednej przestrzeni nazw), a nie z wygl&#261;du kodu (sk&#322;adni).&lt;/p&gt;</description>
      <pubDate>Tue, 14 Nov 2006 16:36:03 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:b8353704-36d0-47b6-bb16-5a0a5d2fec42</guid>
      <link>http://blog.zabiello.com/articles/2006/11/13/javascript-is-cool#comment-288</link>
    </item>
    <item>
      <title>"JavaScript idzie w dobrym kierunku" by mlen</title>
      <description>&lt;p&gt;&amp;#8220;Brzydka&amp;#8221; sk&#322;adnia do lamusa!&lt;/p&gt;


	&lt;p&gt;Jarek, gdyby&#347; nie zna&#322; jeszcze, polecam zapoznac si&#281; r&#243;wnie&#380; z jQuery (&lt;a href="http://jquery.com/" rel="nofollow"&gt;http://jquery.com/&lt;/a&gt;).&lt;/p&gt;


	&lt;p&gt;Oraz w ramach ciekawostek JSOC (JavaScript Object Cache) dost&#281;pny na &lt;a href="http://dev.webframeworks.com/projects" rel="nofollow"&gt;http://dev.webframeworks.com/projects&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;;-)&lt;/p&gt;</description>
      <pubDate>Mon, 13 Nov 2006 22:56:50 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:f5d656a7-0178-47d1-9005-1e62b8d29a9a</guid>
      <link>http://blog.zabiello.com/articles/2006/11/13/javascript-is-cool#comment-287</link>
    </item>
    <item>
      <title>"JavaScript idzie w dobrym kierunku" by Sabistik</title>
      <description>&lt;p&gt;A jednak wole t&#261; &amp;#8216;brzydk&#261;&amp;#8217; sk&#322;adnie.&lt;/p&gt;</description>
      <pubDate>Mon, 13 Nov 2006 21:35:36 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:0dec02a9-e845-49a3-9f1c-39f63c96b45d</guid>
      <link>http://blog.zabiello.com/articles/2006/11/13/javascript-is-cool#comment-286</link>
    </item>
  </channel>
</rss>
