Ternary operator – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Ternary operator – Java – Fórum – Programujte.comTernary operator – Java – Fórum – Programujte.com

 

robin
~ Anonymní uživatel
28 příspěvků
26. 1. 2022   #1
-
0
-

 Potreboval bych vysvetlit parametr url v tom ternarnim operatoru
: addHttp(url);
Pokud dojde na tuto drughou volbu, tak ternarni operator zavola metodu
private String addHttp(String url) , ktera si vezme jako parametr  String url ? a vrati  prave pomoci toho parametru (url) v  addHttp(url); v radku s  terarnimn operatorem adresu url  s http. Je to zhruba tak?

Dekuji

 

@Test
public void moreTernary(){
String url = "www.eviltester.com";
url = url.startsWith("http") ? url : addHttp(url);

assertTrue(url.startsWith("http://"));
assertEquals("http://www.eviltester.com", url);
}
private String addHttp(String url) {
return "http://" + url;
Nahlásit jako SPAM
IP: 212.4.155.–
26. 1. 2022   #2
-
0
-

Pokud url.startsWith("http") vrátí true, do url se vloží url
Pokud url.startsWith("http") vrátí false, tak se zavolá addHttp(url) a návratová hodnota se vloží do url.

Asi je cílem doplnit Http na začátek url když tam není.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
peter
~ Anonymní uživatel
4014 příspěvků
26. 1. 2022   #3
-
0
-

   

url = url.startsWith("http") ? url : addHttp(url);

if (url.startsWith("http"))
   {
   url = url;
   }
else
   {
   url = addHttp(url);
   }
Nahlásit jako SPAM
IP: 2001:718:2601:258:b847:9eb4:9fb0:b82d...–
robin
~ Anonymní uživatel
28 příspěvků
28. 1. 2022   #4
-
0
-

#3 peter
me slo o tohle v tom ternarnim operatoru 
: addHttp(url)

proc tam nemuze byt je 
: addHttp( ) // to (ur)l je pak jako promenna, co si pamatuje ten vystup z return? Chapu dobre?

 

Nahlásit jako SPAM
IP: 212.4.155.–
Kit+15
Guru
28. 1. 2022   #5
-
0
-

#4 robin
Bez toho parametru url by funkce addHttp() nevěděla, k čemu má to schéma přidat.

Kdybys ji napsal jako metodu, tak by se to dalo udělat bez parametru.

Nahlásit jako SPAM
IP: 213.175.51.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
28. 1. 2022   #6
-
0
-

Http(url) = voláš funkci a dáváš jí jako parametr url. Pomocí parametru funkci říkáš s čím má pracovat. Se samotným ternárním operátorem to nesouvisí. Ten je ve tvaru  podmínka? výraz1 : výraz2. A tady je na místě výraz2 volání funkce.

Přiřazení se čte: do proměnné vlevo od = přiřaď co je vpravo od =. Je možné udělat "read-modify-write" jako např. url = funkce(url). Znamená to, že funkce vezme stávající obsah proměnné url (read), vytvoří svou návratovou hodnotu (modify) a tato návratová hodnota se zapíše do proměnné url (write). Tvůj příklad to dělá navíc podmíněně. Pokud url.startsWith("http") vrátí true, přečte si obsah url a zapíše ho zpět do proměnné url. Pokud url.startsWith("http") vrátí false, přečte obsah proměnné url, při volání funkce addHttp(url) ho dá jako její parametr a nakonec návratovou hodnotu funkce zapíše do proměnné url.

Co se tam děje ti peter rozepsal pomocí if else.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
peter
~ Anonymní uživatel
4014 příspěvků
28. 1. 2022   #7
-
0
-

   

@Test
public void moreTernary(){
String url = "www.eviltester.com";
url = url.startsWith("http") ? url : addHttp(url);

assertTrue(url.startsWith("http://"));
assertEquals("http://www.eviltester.com", url);
}
private String addHttp(String url) { <------------- funkce addHttp
return "http://" + url; <------ co ta fukne dela s promenou, prida k ni https

//url = url.startsWith("http") ? url : addHttp(url);
url = url.startsWith("http") ? url : "http://" + url; <--- tak si to klidne napis takto

if (url.startsWith("http"))  <--- nebo takto s ifem
   {
   url = url;
   }
else
   {
//   url = addHttp(url);
   url = "http://" + url
   }

Ten zapis je stejny. If je jen vyhodnejsi pro vic akci najednou.
Ten zapis druhy zapis,  podminka ? value_true : value_false, by mel casove byt rychlejsi a take se setri misto a pismenka kodu. Vetsinou je lepe citelny. Ale, to zalezi na tom, jak slozite za napise. Ja treba v jednom html/js/css programu pouzivam 

function cmp(a,b) { return a==b ? 0 : a<b ? -1 : 1; }

c[3] = c[1]==0 ? c[2] : (c[2]==0 ? -c[1] : cmp(arr[n][i+2],arr[n][i+3]));

---

Tohle cele napsat html/js ifami (v jave se to mozna da elegantneji,
nevim, neprogramuji v jave), tak se zcvoknes :) Asi.

function cmp(a,b) { if (a==b) {return 0;} if (a<b) {return -1;} return 1; }

if (c[1]==0} {c[3] = c[2];}
else { if (c[2]==0) {c[3] = -c[1];}
else {c[3] = cmp(arr[n][i+2],arr[n][i+3]));} }
Nahlásit jako SPAM
IP: 2001:718:2601:258:c16c:676d:e5b6:c17a...–
Kit+15
Guru
28. 1. 2022   #8
-
0
-

#7 peter
Rozhodování mezi variantami jsem si zjednodušil: Pokud bych potřeboval else, použiji ternární operátor. Má to ještě jeden důvod: Uvnitř struktury if je jiné scope - proměnné vzniklé uvnitř po opuštění této struktury zanikají.

V mých programech klíčové slovo else najdeš jen výjimečně. Většinou jen proto, že jsem ho dosud nerefaktoroval na něco lepšího.

Nahlásit jako SPAM
IP: 213.175.51.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
robin
~ Anonymní uživatel
28 příspěvků
30. 1. 2022   #9
-
0
-

#6 hlucheucho
Dekuju, promin nevyjadril sem se asi dobre. 

Ok, ale proc to url jako parametr zadavame v podstate

2x. Jednou v ternarnim operatoru, to jsi mi vysvetlil, ale pak znova v te funkci jako ( String url), to uz prece ta funkce vi, s cim ma pracovat prave z toho ternatniho operatoru z toho addHttp(url).

Neniliz pravda? 

Nahlásit jako SPAM
IP: 212.4.155.–
Wikan
~ Anonymní uživatel
10 příspěvků
30. 1. 2022   #10
-
0
-

#9 robin
Není. Ta metoda absolutně netuší, odkud ji voláš.

Nahlásit jako SPAM
IP: 188.122.202.–
30. 1. 2022   #11
-
0
-

#9 robin
Podle způsobu volání si myslím, že to není metoda, ale je to funkce. Tu funkci může volat kdokoliv (hlavní program, jiná funkce). Funkce nemá žádné informace o stavu programu. A aby věděla, s čím pracovat, má parametr(-y). Aby volající dostal výsledek její práce, má návratovou hodnotu.

Auto ti samo nepojede, samo si nenatankuje. Musíš do něj nalít benzín, u diesela naftu.

Představ si toto:

string modified_url = addHttp(url);
url = url.startsWith("http") ? url : modified_url;

Funkce pracuje jen s tím, co má v parametru, s ničím jiným.

hu

Nahlásit jako SPAM
IP: 2001:af0:ffe4:85f4:d16:9b88:15ea:1389...–
peter
~ Anonymní uživatel
4014 příspěvků
31. 1. 2022   #12
-
0
-

#9 robin
Tvuj dotaz nedava smysl. Ale to je mozna tim, ze to funguje jinak nez myslis :) 

function aaa (a) // nejaka funkce, ktera neco dela
{
a = a + 1;
return a;
}

function bbb (b) // nejaka druha funkce, ktera neco dela
{
b = b + 2;
return b;
}

function ccc (c) // nejaka treti funkce, ktera neco dela
{
c = aaa(c) + bbb(c);
return c;
}

Funkce aaa() ma vstup, ktery si programator pojmenovam A a s tim pracuje uvnitr sebe.
Kdyz ji chces pouzit ve funkci ccc(), tak ji predavas hodnotu C, ale pro vnitrek te funkce je to A.

Jak to popsat nejak lidsky? To uplne nevim.
Predstav si to tak, ze prineses na postu mic. Ten zabalis do baliku. A balik predas na pobocce. Nevi, co je, co je uvnitr. Jejich ukolem je, predat balik dal, zabalit jej do auta.
Nebo jinak. Mas Balik. Ty reknes, ze je to balik. Pro pani na pobocce, protoze je anglicanka je to Package. A dal s tim pracuje jako Package. Nezajima ji, ze nejaka jina strana si to pojmenuje jinak.

A to je presne ten pripad. Ta funkce si tu promenou muze pojmenovat jak chce. A nebo si to pojmenuji vsichni stejne, aby se v tom programator vyznal. Nazev zastupuje jen adresu v pameti (na pozici 123 mam 5 bytu, k temto 5 bytum pridej dalsich 5 'https').

function aaa (url) // nejaka funkce, ktera neco dela
{
url = url + 1; // muzes, ale nemusis to pojmenovat
// stejne jako je ve funkci CCC !
return url;
}

function bbb (url) // nejaka druha funkce, ktera neco dela
{
url = url + 2;
return url;
}

function ccc (url) // nejaka treti funkce, ktera neco dela
{
url = aaa(url) + bbb(url);
return url;
}

Tak, a ted, proc to nedava smysl.
Ty funkce jsou totiz oddelene. Nejsou nijak propojene, nesdileji promene. Jen shodou okolnosti maji promene pojmenovane stejne, takze to muze vypadat, ze jsou stejne.

To, co rikas ty, to jde take udelat. Ale musel by se pouzit jiny programovy kod. Rika se tomu globalni promena. Ta se da sdilet skrz cely program. Nevim, jak se to pise v jave, takze ti ukazi takovy pseudokod, jak to vypada v jnem jazyce...

var url;

function aaa () // pokud pouzijes globalni prom, tak
// nemusis uvadet parametr v definici funkce
{
url = url + 1;
// nemusis uvadet return, protoze prepisujes globalni promenou
}

function bbb ()
{
url = url + 2;
}

function ccc ()
{
aaa();
bbb();
print url;
}

// a nebo muzes pouzit globalni, neprepisovat ji, ale generovat novy vystup
function ddd ()
{
var new_url;
new_url = url + 2;
return new_url;
//return url + 2; // nebo takto
}

Jeste mozna jinak. Ta addHttp() je samostatna funkce 

private String addHttp(String url) {
return "http://" + url;
}

// toto tam mas
url = url.startsWith("http") ? url : addHttp(url);

// a takto to funguje, predavas y, ve funkci se to jmenuje ale url
String x;
String y;
y = '123';
x = addHttp(y)

------

// a takhle by to mohlo byt s globalni promenou (kdybych umel javu :) )
// a jestli to takhle v jave jde vubec napsat!

private String addHttp() {
url = "http://" + url;
}

String url = "www.eviltester.com";
if (url.startsWith("http")) {addHttp();}
Nahlásit jako SPAM
IP: 2001:718:2601:258:b48e:d053:dcbc:69fc...–
shockwave0
Newbie
5. 2. 2022   #13
-
0
-

Muze to byt takhle?

Pokusil sem se to znazornit,ale to ulozeno/prepsani promenne url z returnu  si fakt nejsem jist.

O tohle mi celou dobu jde, fakt je problem v tech nazvech url, blbe se to pisuje. dekuju

Připojen obrázek.

Nahlásit jako SPAM
IP: 212.4.155.–
5. 2. 2022   #14
-
0
-

V obrázku máš chybu: šipka od návratové hodnoty má jít  do druhého řádku k url na levé straně.

proměnná url je jen "krabička" na řetězec. Každým přiřazením vyndáš co v ní bylo a dáváš do ní jiný nebo stejný řetězec.

První řádek udělá krabičku a dá do ní řetězec.

Druhý řádek si vezme řetězec z krabičky, podívá se jestli splňuje podmínku. Pokud ano, vrátí ho do krabičky. Pokud ne, dáho funkci, ta ho upraví. A ten upravený se položí do krabičky.

Můžeš si to namodelovat s krabičkou, papírky a zavolej ségru aby ti udělala funkci.   

hu

Nahlásit jako SPAM
IP: 2001:af0:ffe4:85f4:f851:d153:f46f:8e57...–
shockwave0
Newbie
6. 2. 2022   #15
-
0
-

#14 hlucheucho
Fakt moc dekuji

Nahlásit jako SPAM
IP: 212.4.155.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 38 hostů

Podobná vlákna

Operator - — založil yaqwsx

Operátor &lt;&lt; — založil RePRO

Operátor -> — založil Adam

Operator&lt;&lt; — založil Gadael

Friend operator+ — založil Stamp

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý