<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.3.1-beta1" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>
<channel>
	<title>Comments on: Относно конвенциите</title>
	<link>http://skanev.com/2007/11/13/regarding-conventions/</link>
	<description>Блогът на Стефан Кънев</description>
	<pubDate>Wed, 09 Jul 2008 01:40:14 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.1-beta1</generator>
		<item>
		<title>By: Codito ergo sum &#187; Думи от занаята</title>
		<link>http://skanev.com/2007/11/13/regarding-conventions/#comment-941</link>
		<dc:creator>Codito ergo sum &#187; Думи от занаята</dc:creator>
		<pubDate>Fri, 25 Jan 2008 09:40:22 +0000</pubDate>
		<guid>http://skanev.com/2007/11/13/regarding-conventions/#comment-941</guid>
		<description>[...] са важни. Трябва да внимаваме с употребата им за да можем да се разбираме. Но често не стигат, когато говорим за някаква [...]</description>
		<content:encoded><![CDATA[<p>[&#8230;] са важни. Трябва да внимаваме с употребата им за да можем да се разбираме. Но често не стигат, когато говорим за някаква [&#8230;]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Свилен</title>
		<link>http://skanev.com/2007/11/13/regarding-conventions/#comment-279</link>
		<dc:creator>Свилен</dc:creator>
		<pubDate>Wed, 14 Nov 2007 11:32:19 +0000</pubDate>
		<guid>http://skanev.com/2007/11/13/regarding-conventions/#comment-279</guid>
		<description>Признавам - &lt;code&gt;ArrayList/LinkedList&lt;/code&gt; не добър пример - все пак това са различни фундаментални типове данни с характерните си свойства; прилагането им трябва да бъде съобразено.

От друга страна, според мен влагането на нюанси в &lt;code&gt;for/while&lt;/code&gt; и описвайки ги в конвенция, е малко пресилено. Преполагам никой от нас не използва while за да извърти един масив - просто защото е свикнал да гледа, че това се прави с &lt;code&gt;for&lt;/code&gt; - в учебниците, в кода на колегите, в чужд софтуер. Съгласен съм, че &lt;code&gt;for each&lt;/code&gt; конструкциите са още по експресивни. Колкото повече "стандартни конструкции" един програмист използва, толкова по-лесен е кода за четене - но пак искам да уточня: ако програмиста смята, че дадена конструкция отговаря по-добре на намерението му - нека я ползва; не трябва конвенцията да го спира. Добър пример е дебата около goto - в език като &lt;em&gt;C&lt;/em&gt;, където програмните изключенията (exceptions) са недостъпен лукс. Например функцията с goto, което прехвърлят изпълнението в края при невалиден входни параметри е доста по-четима от няколко вложени &lt;code&gt;if&lt;/code&gt;-a. Ето тук конвенция "goto e враг номер едно на &lt;a href="http://www.edno.bg/?page=all_comments&#38;id=855" rel="nofollow"&gt;Тутраканската селищна система&lt;/a&gt;" би спънал четливия код.

Мойте 5 ст'инки.</description>
		<content:encoded><![CDATA[<p>Признавам - <code>ArrayList/LinkedList</code> не добър пример - все пак това са различни фундаментални типове данни с характерните си свойства; прилагането им трябва да бъде съобразено.</p>
<p>От друга страна, според мен влагането на нюанси в <code>for/while</code> и описвайки ги в конвенция, е малко пресилено. Преполагам никой от нас не използва while за да извърти един масив - просто защото е свикнал да гледа, че това се прави с <code>for</code> - в учебниците, в кода на колегите, в чужд софтуер. Съгласен съм, че <code>for each</code> конструкциите са още по експресивни. Колкото повече &#8220;стандартни конструкции&#8221; един програмист използва, толкова по-лесен е кода за четене - но пак искам да уточня: ако програмиста смята, че дадена конструкция отговаря по-добре на намерението му - нека я ползва; не трябва конвенцията да го спира. Добър пример е дебата около goto - в език като <em>C</em>, където програмните изключенията (exceptions) са недостъпен лукс. Например функцията с goto, което прехвърлят изпълнението в края при невалиден входни параметри е доста по-четима от няколко вложени <code>if</code>-a. Ето тук конвенция &#8220;goto e враг номер едно на <a href="http://www.edno.bg/?page=all_comments&amp;id=855" rel="nofollow">Тутраканската селищна система</a>&#8221; би спънал четливия код.</p>
<p>Мойте 5 ст&#8217;инки.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Стефан Кънев</title>
		<link>http://skanev.com/2007/11/13/regarding-conventions/#comment-278</link>
		<dc:creator>Стефан Кънев</dc:creator>
		<pubDate>Wed, 14 Nov 2007 09:55:15 +0000</pubDate>
		<guid>http://skanev.com/2007/11/13/regarding-conventions/#comment-278</guid>
		<description>@Свилен:
Сега, аз пък точно за това адвокатствам - че ArrayList/LinkedList, for/while са вариация на едно израно средство - позволяват ти да кажеш едно нещо по няколко начина. И е особено критично да се ползват консистентно в кода. А нещо което е консистентно като нищо може да подлежи на конвенция, била тя и полу-формален фолклор в екипа, а не драконов закон.

Ще ти дам по-конкретен пример.

&lt;pre lang="java"&gt;
for (int i = 0; i &lt; numbers.length; i++) {
  System.out.println(numbers[i]);
}
&lt;/pre&gt;

Проста програма. Чете се като "за всяко число в numbers, изведи го на екрана". Виж какво става, ако го напишеш с &lt;code&gt;while&lt;/code&gt;:

&lt;pre lang="java"&gt;
int i = 0;
while (i &lt; numbers.length) {
    System.out.println(numbers[i]);
    i++;
}
&lt;/pre&gt;

Действието е идентично. Дори ще генерира същия байт-код. Но се чете така "докато i е по-малко от дължината на numbers, извеждай i-тото число в numbers и увеличи i след това". Което е много по-далеч от идеята на кода (intention).

Когато човек използва for/while неподходящо, само дава грешни сигнали. Не изразява кода четливо и еднозначно, в твои думи. Когато избира между ArrayList и LinkedList ползвайки &lt;code&gt;rand()&lt;/code&gt;, вместо да прецени кое е по-подходящо създава объркване.

Това важи още повече за някои неща които са по средата. Класическата конвенция в ruby е да се ползва &lt;code&gt;begin/end&lt;/code&gt; за блоково на повече от един ред и &lt;code&gt;{ }&lt;/code&gt; за блокове на един ред. Алтернативната идея е да се ползва &lt;code&gt;begin/end&lt;/code&gt; когато важното са странични ефекти, докато &lt;code&gt;{ ... }&lt;/code&gt; като се изчислява резултат. Която идея да изберете, трябва да сте консистентни в рамките на екипа - иначе твоя код ще ме обърква, докато моя код ще те дразни, защото ползвам &lt;code&gt;{ ... }&lt;/code&gt; за големи блокове.</description>
		<content:encoded><![CDATA[<p>@Свилен:<br />
Сега, аз пък точно за това адвокатствам - че ArrayList/LinkedList, for/while са вариация на едно израно средство - позволяват ти да кажеш едно нещо по няколко начина. И е особено критично да се ползват консистентно в кода. А нещо което е консистентно като нищо може да подлежи на конвенция, била тя и полу-формален фолклор в екипа, а не драконов закон.</p>
<p>Ще ти дам по-конкретен пример.</p>
<pre lang="java">
for (int i = 0; i < numbers.length; i++) {
  System.out.println(numbers[i]);
}
</pre>
<p>Проста програма. Чете се като &#8220;за всяко число в numbers, изведи го на екрана&#8221;. Виж какво става, ако го напишеш с <code>while</code>:</p>
</pre>
<pre lang="java">
int i = 0;
while (i < numbers.length) {
    System.out.println(numbers[i]);
    i++;
}
</pre>
<p>Действието е идентично. Дори ще генерира същия байт-код. Но се чете така &#8220;докато i е по-малко от дължината на numbers, извеждай i-тото число в numbers и увеличи i след това&#8221;. Което е много по-далеч от идеята на кода (intention).</p>
<p>Когато човек използва for/while неподходящо, само дава грешни сигнали. Не изразява кода четливо и еднозначно, в твои думи. Когато избира между ArrayList и LinkedList ползвайки <code>rand()</code>, вместо да прецени кое е по-подходящо създава объркване.</p>
<p>Това важи още повече за някои неща които са по средата. Класическата конвенция в ruby е да се ползва <code>begin/end</code> за блоково на повече от един ред и <code>{ }</code> за блокове на един ред. Алтернативната идея е да се ползва <code>begin/end</code> когато важното са странични ефекти, докато <code>{ ... }</code> като се изчислява резултат. Която идея да изберете, трябва да сте консистентни в рамките на екипа - иначе твоя код ще ме обърква, докато моя код ще те дразни, защото ползвам <code>{ ... }</code> за големи блокове.</pre>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anislav</title>
		<link>http://skanev.com/2007/11/13/regarding-conventions/#comment-277</link>
		<dc:creator>Anislav</dc:creator>
		<pubDate>Wed, 14 Nov 2007 08:25:37 +0000</pubDate>
		<guid>http://skanev.com/2007/11/13/regarding-conventions/#comment-277</guid>
		<description>Пак мислим еднакво с тебе ;)</description>
		<content:encoded><![CDATA[<p>Пак мислим еднакво с тебе <img src='http://skanev.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Свилен</title>
		<link>http://skanev.com/2007/11/13/regarding-conventions/#comment-276</link>
		<dc:creator>Свилен</dc:creator>
		<pubDate>Wed, 14 Nov 2007 07:25:41 +0000</pubDate>
		<guid>http://skanev.com/2007/11/13/regarding-conventions/#comment-276</guid>
		<description>Според мен използването на определени езикове конструкции (for vs. while, ArrayList vs. LinkedList), е твърде ниско ниво за да подлежи на конвенция - програмиста трябва да използва целия арсенал на езика си за да се изрази &lt;em&gt;четливо и еднозначно&lt;/em&gt;.

От досегашната ми работа мога да направя &lt;a href="http://svilen-online.blogspot.com/2007/11/blog-post_14.html" rel="nofollow"&gt;няколко извода за конвенциите&lt;/a&gt;.</description>
		<content:encoded><![CDATA[<p>Според мен използването на определени езикове конструкции (for vs. while, ArrayList vs. LinkedList), е твърде ниско ниво за да подлежи на конвенция - програмиста трябва да използва целия арсенал на езика си за да се изрази <em>четливо и еднозначно</em>.</p>
<p>От досегашната ми работа мога да направя <a href="http://svilen-online.blogspot.com/2007/11/blog-post_14.html" rel="nofollow">няколко извода за конвенциите</a>.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
