<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>BBProject.net &#187; operator</title>
	<atom:link href="http://www.bbproject.net/tag/operator/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bbproject.net</link>
	<description>Programowanie, webmastering, informatyka</description>
	<lastBuildDate>Tue, 01 Mar 2011 20:35:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Aktywuj pakiet!</title>
		<link>http://www.bbproject.net/2010/09/aktywuj-pakiet/</link>
		<comments>http://www.bbproject.net/2010/09/aktywuj-pakiet/#comments</comments>
		<pubDate>Thu, 30 Sep 2010 09:05:28 +0000</pubDate>
		<dc:creator>M@ster</dc:creator>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[oferta]]></category>
		<category><![CDATA[operator]]></category>
		<category><![CDATA[pakiet]]></category>
		<category><![CDATA[taryfa]]></category>
		<category><![CDATA[telefon]]></category>

		<guid isPermaLink="false">http://www.bbproject.net/?p=387</guid>
		<description><![CDATA[Długo myślałem na tytułem tego wpisu, aby oddawał on jego istotę. W końcu postawił na prostotę, bo chyba o to w tym wszystkich chodzi &#8211; a przynajmniej powinno. Z zaciekawieniem obserwuję oferty prepaid operatorów komórkowych. Obecne ich starania dążą do jednego: aktywuj pakiet! Minęły już czasy prostych i przejrzystych stawek za połączenia głosowe. Dzisiaj są [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-thumbnail wp-image-388 alignleft" title="Phone icon" src="http://www.bbproject.net/wp-content/uploads/2010/09/126744-simple-black-square-icon-business-phone1-160x160.png" alt="" width="160" height="160" />Długo myślałem na tytułem tego wpisu, aby oddawał on jego istotę. W końcu postawił na prostotę, bo chyba o to w tym wszystkich chodzi &#8211; a przynajmniej powinno. Z zaciekawieniem obserwuję oferty prepaid operatorów komórkowych. Obecne ich starania dążą do jednego: aktywuj pakiet!</p>
<p>Minęły już czasy prostych i przejrzystych stawek za połączenia głosowe. Dzisiaj są one tylko dodatkiem do całej palety pakietów, bonusów i innych świecidełek z rozmaitymi kruczkami. W założeniu pakiet ma służyć obniżeniu kosztu korzystania z telefonu po przez np.: hurtowe wykupienie minut z góry. Wszystko było by fajnie, tylko z reguły tego typu wynalazki obwarowane są dziesiątkami zakazów i regulacji, które powodują iż wykorzystanie owego pakietu tak by na tym nie stracić robi się coraz trudniejsze.</p>
<p><span id="more-387"></span>Zdecydowana większość tego typu bonusów przepada oczywiście po 30 dniach od aktywacji. Co niektóre obowiązują tylko w sieci macierzystej. Jeszcze inne mają jednostkę rozliczeniową tak wygórowaną że ponad 50% i tak przepada (np.: pakiety internetowe). Z utęsknieniem wyczekuję oferty w której obowiązywać będzie zasada że pakiet ważny jest tylko gdy dzwonimy do osób których nazwisko zaczyna się na W i kończy na literę E, a prababcia zainteresowanego ma korzenie irlandzkie.</p>
<p>Po co to wszystko? Oczywiście chodzi o pieniądze. Liczba abonentów korzystająca z tego typu ofert, a nie będąca w stanie efektywnie wykorzystać pakietu, przekracza liczbę tych którzy potrafią. W efekcie czego operator zarabia. W reklamie za to można się pochwalić rozmowami za 1gr. Nie ważne że dotyczy to 5% ludzi i że trzeba wygadać 10 000 minut w miesiącu aby realnie osiągnąć taką stawkę. Już szczytem bezczelności jest stwierdzenie „do wszystkich” a poniżej małymi literkami „w sieci”.</p>
<p>Po co o tym piszę? Moim marzeniem jest doczekania się oferty, prostej, przejrzystej i względnie taniej bez konieczności zabawy z pakietami. Swego czasu taka była taryfa Era Happy. Jeśli dziś zobaczycie ilość rzeczy jaką można aktywować do niej to złapiecie się za głowę. Podobnie wygląda sprawa z Play Fresh, aczkolwiek tutaj jeszcze nie jest tak źle &#8211; nie mniej od początku istnienia tej oferty sukcesywnie dochodzą kolejne bonusy.</p>
<p>Reasumując. Nie każdy jest nastoletnim maniakiem bawiącym się w aktywacje pakietów i pilnującym by nie wyjść na tym do tyłu. Inni po prostu chcą korzystać z telefonu. Zamiast dodawać pakiety, czy nie lepiej obniżyć ceny w pierwotnej taryfie?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bbproject.net/2010/09/aktywuj-pakiet/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Operator trójargumentowy w Delphi</title>
		<link>http://www.bbproject.net/2010/04/operator-trojargumentowy-w-delphi/</link>
		<comments>http://www.bbproject.net/2010/04/operator-trojargumentowy-w-delphi/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 12:46:35 +0000</pubDate>
		<dc:creator>M@ster</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[delphi]]></category>
		<category><![CDATA[instrukcja warunkowa]]></category>
		<category><![CDATA[operator]]></category>
		<category><![CDATA[overload]]></category>
		<category><![CDATA[przeciążenie]]></category>

		<guid isPermaLink="false">http://www.bbproject.net/?p=212</guid>
		<description><![CDATA[W PHP funkcjonuje coś takiego jak operator trójargumentowy. Jest to składnia języka, pozwalająca na zastąpienie pojedynczego bloku if&#8230;else w bardziej przejrzysty sposób: warunek ? jeśli_prawda : jeśli_fałsz Przykładowo: $zmienna = $k &#62;= 0 ? 'dodatnie' : 'ujemne'; &#8230;odpowiada konstrukcji: if ($k &#62;= 0) {   $zmienna = 'dodatnie'; } else {   $zmienna = 'ujemne'; [...]]]></description>
			<content:encoded><![CDATA[<p>W PHP funkcjonuje coś takiego jak operator trójargumentowy. Jest to składnia języka, pozwalająca na zastąpienie pojedynczego bloku <em>if&#8230;else</em> w bardziej przejrzysty sposób:</p>
<pre>warunek ? jeśli_prawda : jeśli_fałsz</pre>
<p>Przykładowo:</p>
<pre class="brush: php">$zmienna = $k &gt;= 0 ? 'dodatnie' : 'ujemne';</pre>
<p>&#8230;odpowiada konstrukcji:</p>
<pre class="brush: php">if ($k &gt;= 0)
{
  $zmienna = 'dodatnie';
}
else
{
  $zmienna = 'ujemne';
}</pre>
<p>Jak widać uproszczenie jest znaczne. Object Pascal (Delphi) nie posiada niestety operatora trójargumentowego. W tym wpisie pokażę jak zastąpić tą funkcjonalność przy pomocy prostej funkcji i jej <a href="http://pl.wikipedia.org/wiki/Przeci%C4%85%C5%BCanie_funkcji">przeciążenia</a>.</p>
<p><span id="more-212"></span>Zasadniczo, naszym zadaniem będzie stworzenie funkcji o 3 argumentach, która będzie odpowiednikiem operatora trójargumentowego. Jako iż nie jest to skomplikowane zadanie, przystąpmy do działania:</p>
<pre class="brush: delphi">function IfThen(Condition: Boolean; const TrueValue: String; const FalseValue: String): String;
begin
  if Condition then Result := TrueValue else Result := FalseValue;
end;</pre>
<p>Funkcję tę nazwałem <em>IfThen</em>, gdyż jest to w zasadzie skrót konstrukcji <em>if&#8230;then&#8230;else</em>. Pierwszym parametrem jest warunek, kolejnym zwracana wartość w przypadku spełnienia owego warunku i ostatnim, wartość w przypadku fałszu.</p>
<p>Jak możemy zauważyć, funkcja dedykowana jest jedynie dla argumentów będących ciągiem znaków. Korzystając z dyrektywy <em>overload</em>, stwórzmy przeciążone funkcje dostosowane do wielu różnych typów zmiennych. Całość, umieściłem od razu w osobnym module w celu łatwiejszego, późniejszego wykorzystania napisanych funkcji.</p>
<pre class="brush: delphi">unit TripleOperator;

interface

function IfThen(Condition: Boolean; TrueValue, FalseValue: Byte): Byte; overload;
function IfThen(Condition: Boolean; TrueValue, FalseValue: Integer): Integer; overload;
function IfThen(Condition: Boolean; TrueValue, FalseValue: Single): Single; overload;
function IfThen(Condition: Boolean; TrueValue, FalseValue: Double): Double; overload;
function IfThen(Condition: Boolean; const TrueValue: String; const FalseValue: String): String; overload;

implementation

function IfThen(Condition: Boolean; TrueValue, FalseValue: Byte): Byte;
begin
  if Condition then Result := TrueValue else Result := FalseValue;
end;

function IfThen(Condition: Boolean; TrueValue, FalseValue: Integer): Integer;
begin
  if Condition then Result := TrueValue else Result := FalseValue;
end;

function IfThen(Condition: Boolean; TrueValue, FalseValue: Single): Single;
begin
  if Condition then Result := TrueValue else Result := FalseValue;
end;

function IfThen(Condition: Boolean; TrueValue, FalseValue: Double): Double;
begin
  if Condition then Result := TrueValue else Result := FalseValue;
end;

function IfThen(Condition: Boolean; const TrueValue: String; const FalseValue: String): String;
begin
  if Condition then Result := TrueValue else Result := FalseValue;
end;

end.
</pre>
<p style="text-align: right;">Pobierz <a href="http://www.bbproject.net/wp-content/uploads/2010/01/triple_operator.zip">TripleOperator.pas</a>.</p>
<p>Tym sposobem, zrealizowaliśmy operator trójargumentowy w Delphi dla kilku typów zmiennych. Jak widać, bardzo łatwo można dodać kolejne. Przykładowe użycie funkcji <em>IfThen</em>:</p>
<pre class="brush: delphi">procedure TForm1.Button1Click(Sender: TObject);
begin
  Caption := IfThen(Top &lt;= 200, 'okno jest nisko', 'okno jest wysoko');
end;</pre>
<p>Niestety są pewne kruczki w stosunku do wersji w PHP. Po pierwsze, jest to funkcja a nie składnia języka &#8211; ciut mniejsza wydajność. Po drugie, w przypadku spełnienia warunku, oba argumenty muszą zostać przekazane do funkcji, a nie tylko ten odpowiedzialny za prawdę. Innymi słowy, jeśli argumentami są wyniki działań innych funkcji, to bez względu na wynik parametru <em>Condition</em>, i tak obie zostaną wykonane, mimo że zwrócona zostanie tylko jedna z nich. Nie posiada tego mankamentu konstrukcja <em>if&#8230;then&#8230;else</em>, gdzie po wykonaniu pierwszej instrukcji, blok <em>else</em> w ogóle nie jest analizowany. W zależności od wykorzystania, może to nie mieć znaczenia lub mieć bardzo duże. Przykładowo:</p>
<pre class="brush: delphi">Count := IfThen(i = 0, 8, 8 div i);</pre>
<p>Taki przypadek, w sytuacji gdy zmienna <em>i</em> przyjmuje wartość 0, spowoduje niestety błąd.</p>
<p>Wszystko więc zależy od zastosowania, nie mniej, w większości przypadków skraca nam to ilość kodu jaki musielibyśmy napisać tradycyjnie.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bbproject.net/2010/04/operator-trojargumentowy-w-delphi/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

