BG Development


Страници: (5) [1] 2 3 ... последна »  ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Има ли смисъл от switch и къде има потребност?
Gluhiqdev
Публикувано на: 13-04-2019, 12:36
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 11
Регистриран на: 13.04.19



Здравейте,

отскоро изучавам усилено PHP и стигнах до оператора switch(); но не виждам къде бих могъл да го употребявам? Има ли смисъл да се задълбочавам в този оператор или просто да го пропусна.

Задавам този въпрос защото реално същият резултат мога да го постигна и с if, elseif.

Благодаря Ви, за отделеното внимание и се надявам скоро време и аз да бъда полезен тук.
PMEmail Poster
Top
ROSката
Публикувано на: 13-04-2019, 14:53
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 41
Регистриран на: 17.11.16



има смисъл от него в определени ситуации. просто не е толкова удобен , според мен! хубаво е да решиш няколко задачи и да го знаеш icon_smile.gif.


--------------------
<? php
while (have_posts() ) {
the_post() ;
the_title() ;
the_content() ;
PMEmail Poster
Top
CPPlus
Публикувано на: 13-04-2019, 19:47
Quote Post



Име: Людмил Григоров
Група: Потребител
Ранг: Почетен член

Мнения: 1114
Регистриран на: 22.06.11



I am definitely a fan of it due to its readability - every time when there are more than two cases and especially if there is a block that is to be executed in response to more than one case: switch is the way to go for me.
PS: No cyrillic at work, bear with it icon_lol.gif


--------------------
Нищо не е свършило, докато не е свършило! Не се предавай и ще постигнеш целта си!
PMEmail Poster
Top
Gluhiqdev
Публикувано на: 13-04-2019, 22:40
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 11
Регистриран на: 13.04.19



@ROSката благодаря ти за адекватният отговор! Днес цял ден изучавах възможностите на switch() и има доста полезни приложения примерно в анкети и т.н. Кода изглежда по-подреден и по-чист но за добро или лошо не винаги ще се налага да го използвам.

@CPPlus thanks for your support! I living in Bulgaria and here official language is Bulgarian.

PMEmail Poster
Top
PxL
Публикувано на: 13-04-2019, 23:07
Quote Post


Group Icon
Име: Димитър Т. Димитров
Група: VIP
Ранг: Почетен член

Мнения: 2890
Регистриран на: 26.04.05



Смисъла да го ползваш е, да те приемат сериозно като "програмист" и да дадеш възможност на оптимизатора да оптимизира спагетите ти.


--------------------
void putchar(char c);int main(){int x,c=1,i;for(i=0;(x="PxLY2H4:2E;7231?=68255A5S5P9N:N9O84111H861I85111G9N:O811O812M<G33911EAEDBECE22169D1=2k"[i+++3]);)while(x-->'0')putchar((!(++c%'('))?0x0a:33^(i&1));}
PMEmail PosterUsers Website
Top
gat3way
Публикувано на: 14-04-2019, 00:11
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 4004
Регистриран на: 22.06.12



Това дали ще ги оптимизира по-добре със switch-а е малко спорна работа, дори вероятно ако целта е това и особено ако не е някакъв тривиален случай, по-скоро бих го разписал с if-ове напук на всичко което обясняват по този повод. switch-овете са по-прегледни за четене от хора и това като цяло им е основният плюс. Всъщност сещам се само за едно изключение, вече не помня в детайли какво точно беше, но се свеждаше до нещо от сорта на това да се търси множество от сходни кратки подстрингове в стринг, с тази разлика че стринга в паметта е разположен в chunk-ове с фиксирана дължина и незадължително разположени последователно в паметта, та подниза можеше да се окаже част от него в един chunk, част от него в друг, това беше и относително performance-critical. Та колегата (голям пич апропо) беше врътнал някаква странна и извратена схема със switch-ове само и само за да спести една проверка и нещо в повече и беше някакъв гениален замисъл, никога нямаше да ми хрумне. Познай дали това отиде в production обаче, всички дето го гледаха го гледаха с погнуса и имаше "абе това е много хубаво ама...".

Това мнение е било редактирано от gat3way на 14-04-2019, 00:33
PMEmail Poster
Top
PxL
Публикувано на: 14-04-2019, 07:59
Quote Post


Group Icon
Име: Димитър Т. Димитров
Група: VIP
Ранг: Почетен член

Мнения: 2890
Регистриран на: 26.04.05



Освен, че е по-четимо в повечето случаи ще се усети и ще ти ги направи с lookup таблица, при if-а не смятам, че изобщо ще го отчете като вариант това.


--------------------
void putchar(char c);int main(){int x,c=1,i;for(i=0;(x="PxLY2H4:2E;7231?=68255A5S5P9N:N9O84111H861I85111G9N:O811O812M<G33911EAEDBECE22169D1=2k"[i+++3]);)while(x-->'0')putchar((!(++c%'('))?0x0a:33^(i&1));}
PMEmail PosterUsers Website
Top
thrawn
Публикувано на: 14-04-2019, 08:08
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2370
Регистриран на: 17.01.17



CODE
var today = switch(day) {
   case SAT, SUN -> "Weekend day";
   case MON, TUS, WED, THU, FRI -> "Working day";
   default -> throw new IllegalArgumentException("Invalid day: " + day.name());
};


Java
PMEmail Poster
Top
gat3way
Публикувано на: 14-04-2019, 10:16
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 4004
Регистриран на: 22.06.12



При if-а почти сигурно няма да го докара до lookup таблица. При switch-а напротив на общоприетото има доста голяма вероятност също да не го направи, поради много причини - първата (очевидната) е ако проверяваш срещу стойности, които не са последователни, ами "пръснати" достатъчно добре, то става разхищение да се имплементира с таблица и в крайна сметка пак ще го сведе до проверки и бранчване. Втората е по-малко очевидна и тя е свързана със спекулативното изпълнение и branch prediction-а в днешно време - процесорът ако види нещо от сорта на cmp...je ще му се задействат черните магии, докато ако види нещо от сорта на mov...jmp вече е съмнително.
PMEmail Poster
Top
SuN
Публикувано на: 14-04-2019, 10:37
Quote Post


Group Icon
Име:
Група: Администратор
Ранг: Почетен член

Мнения: 8793
Регистриран на: 27.01.05



QUOTE (PxL @ 14-04-2019, 07:59)
Освен, че е по-четимо в повечето случаи ще се усети и ще ти ги направи с lookup таблица, при if-а не смятам, че изобщо ще го отчете като вариант това.

За пхп ли говорите още? Много частен случай са оптимизациите. Гледал съм асемблера на програма написана не по-стандарта на езика и компилатора беше изгенерирал един иф по-малко (разредени бяха стойностите, така че не се ползваше таблица) като прескачаше една стойност и програмата зацикляше.

Ако се бяха ползвали ифове нямаше компилатора да омаже асемблера. icon_smile.gif

Това мнение е било редактирано от SuN на 14-04-2019, 10:39
PMEmail Poster
Top
0 потребители преглеждат тази тема в момента (0 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (5) [1] 2 3 ... последна » Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0