MAGNET 7 Napisano 24 Maja 2019 int a = 5; if (!a) { // akcja dla a = 0 } else if (a == 1) { // akcja dla a = 1 } else if (a == 2) { // akcja dla a = 2 } else { // akcja dla a nie będącego 0, 1 ani 2 } Tak długi i nadmiarowy kod można zastąpić używając funkcji switch: int a = 5; switch(a) { case 0: { // akcja dla a = 0; } case 1: { // akcja dla a = 1; } case 2: { // akcja dla = 2; } default: { // akcja dla a innego niż 0, 1 i 2 } } Skrócony tryb warunkowy warunek ? co robić, gdy warunek==true : co robić, gdy warunek==false; przydatny, gdy mamy do czynienia z sytuacją if-else. Możemy wówczas ograniczyć się do formuły podanej wyżej. Przykład zastosowania: int hpGracza = 50; SetEntityHealth(client, hpGracza > 40 ? 100 : 70); Zasada działania: jeżeli HP gracza jest większe niż 40, zmień zdrowie na 100. W przeciwnym razie (HP mniejsze bądź równe 40) - 70. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Vasto_Lorde Napisano 26 Maja 2019 Nie chce mi się sprawdzać, ale na 99,(9)% jestem pewny, że jeśli zmienna ma 0 lub liczbę ujemną, to wartość tego wynosi false, więc if się nie wykonuje. Nie tylko w SourcePawnie ale w innych językach też if(!a) //tutaj wykona się coś gdy a <= 0 else //tutaj wykona się coś gdy a > 0 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
MAGNET Napisano 26 Maja 2019 Sprawdzę to jeszcze dzisiaj Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
MAGNET 1 Napisano 26 Maja 2019 Kod: #include <sourcemod> public void OnPluginStart() { RegConsoleCmd("sm_tt", test); } public Action test(int client, int args) { int a = 5; int b = 0; int c = -5; sprawdz(client, a); sprawdz(client, b); sprawdz(client, c); } void sprawdz(int client, int x) { if (x) { PrintToChat(client, "%d wchodzi do \"if(X)\"", x); } else { PrintToChat(client, "%d wchodzi do \"if(!X)\"", x); } } Output: 5 wchodzi do "if(X)" 0 wchodzi do "if(!X)" -5 wchodzi do "if(X)" Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Vasto_Lorde 1 Napisano 26 Maja 2019 Okej, cofam wszystko. Mój światopogląd się wali XD Python: Cytat Mamy podany kod: for i in range(-2, 3): print(i, ' - ', i == True) "i == True" zwraca True tylko i wyłącznie gdy i = 1; "i == False" zwraca True tylko i wyłącznie gdy i = 0; Dokładnie ta sama reakcja dzieje się z "if (i)" PHP: Cytat Mamy podany kod: <?php foreach (array(-2,-1,0,1,2) as $i) echo $i == true ? true : false; ?> "$i == true" zwraca 1 dla każdej wartości oprócz 0 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
MAGNET 1 Napisano 26 Maja 2019 W przypadku Pythona zapewne dochodzi do jakiejś zakulisowej konwersji na typ bool. W przypadku wartości większych o 1 może do takiego czegoś nie dochodzić, i w efekcie mamy swoisty konflikt typów, co zwraca false (tylko domysły, prawda leży pewnie pośrodku) Jeśli spojrzymy na sytuację bardziej globalnie to powód, dla którego !a jest prawdziwe dla wartości ujemnych staje się dość oczywisty - chodzi tutaj o reprezentację bitową . Dla niewtajemniczonych: Nie bez powodu maksymalna wartość, jaką może osiągnąć unsigned int jest 2x większa od zwykłego inta (nie mylić z przedziałem). W zwykłym int'ie poświęcany jest jeden bit, aby określać, czy liczba jest dodatnia bądź ujemna. Możemy to sobie prosto zwizualizować. Na potrzeby tego wyjaśnienia przyjmijmy, że integer ma 8 bitów (aby nie musieć pisać 32 liczb...). Bitowa reprezentacja liczby 5 będzie wyglądać następująco: 00000101 Natomiast -5 będzie wyglądać tak: 10000101 Funkcję "minusa" pełni właśnie jedynka z lewej strony Jak widać obydwie liczby posiadają w swoim zapisie przynajmniej jedną jedynkę. Kiedy używamy if'a sprawdza on, czy wyrażenie w środku jest prawdą. Kiedy podajemy mu samą liczbę dedukuje on, że podana wartość musi mieć "coś" - i jak widać, zarówno 5 jak i -5 "coś" posiadają ;D Ot, cała zagadka Cytuj Przez MAGNET, 26 Maja 2019 Z tego też powodu negacja liczby (!a) robi coś odwrotnego - sprawdza, czy w środku jest "nic". Dlatego można używać tej formy zapisu zamiennie za "a == 0" Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach