Self -Prośba o wytłumaczenie. Objective-C

0

Witam,
Zabrałam się za naukę Objective-C.
Miałam jakiś czas temu na studiach programowanie w C, ale muszę wszystko zaczynać od nowa.
Do tego składnia Objective-C do prostych nie należy.

Myślałam, że to nie problem.
Przerabiałam różne tutoriale na youtube, i spodobał mi się sposób nauki na codeschool.com
Doszłam do 4 levela i odbiłam się od ściany napotykając na self.

Przed napisaniem tutaj posta, aby nie zawracać Wam głowy przeszukałam youtube (nie było łatwego przykładu), stacoverflow (nie zrozumiałam).
Na polecanej tu stronie:
https://www.thenewboston.com/videos.php?cat=33
(jeszcze nie przerabiałam), w tytułach tematu nie znalazłam self. Może jest gdzieś.
Dość prosty przykład z dokumentacji Apple jest trochę za mało jasny dla mnie.

Prosiłabym o wytłumaczenie jaką rolę pełni self w tych dwóch prostych przykładach z codeschool:

Person.h

@interface Person : NSObject
@property NSString *firstName;
@property NSString *lastName;
- (NSString *)fullName;     

Person.m

 #import "Person.h"
@implementation Person
- (NSString *)fullName;
{
   return [NSString stringWithFormat:@"%@ %@", self.firstName, self.lastName];
}
@end
  1. Przykład

Telekom.h

@interface Telekom : NSObject
@property NSString *phoneName;
@property NSString *modelNumber;
- (NSString *) speak;
@end

Telekom.m

@implementation Telekom
-(NSString *)speak;
{
    NSString *message = [NSString stringWithFormat:@"%@ says Hello There!", self.phoneName];
    return message;
}
@end
#import "Telekom.h"
Telekom *talkingiPhone = [[Telekom alloc] init];                   
talkingiPhone.phoneName = @"Mr. Higgie";                
NSString *phoneMessage = [talkingiPhone speak];   
NSLog(@"%@", phoneMessage);

Patrząc na poruszany na form kod z Objective - C zawirający self:
http://4programmers.net/Forum/Inne/254925-wyswietlanie_tabelki_objective-c
Można dojść do wniosku że jest to bardzo ważny element Objective C.

Z góry dziękuję za tłumaczenie.

1

@MarBa
Nie znam na tyle Obj-c zeby wytlumaczyc Ci to na przykladzie (moze @MarekR22 znajdzie czas) ale self jak sama nazwa wskazuje mowi o sobie

W C++ masz this
w Pythonie rowniez masz self (poczytaj ten link po moim poscie) http://pythontips.com/2013/08/07/the-self-variable-in-python-explained/

O co chodzi z tym self/this

masz taka klase

Class Bar
{
  function foo()
  {
    /* tutaj cos kod robi, nie wazne co*/
  }
} 

i gdy tworzysz obiekt tej klasy nazwijmy go MarbaObject i nastepnie wywolujesz ta funkcje. to przewaznie robi sie to tak

Bar MarbaObject;
MarbaObject.foo();

przewaznie to tak dziala... ale tak na prawde, to skad ma wiedziec ta funkcja do jakiego obiektu ona nalezy? Funkcja nie ma mozliwosci magicznie wiedziec co ja wywolalo. Dlatego przy takim wywolaniu jest dodawany this/self

wiec tak naprawde tam przekazujesz this/self by funkcja wiedziala jaki obiekt ja wywolal ;)

poczytaj o pythonie self jezeli materialy o obj-c nie daja Ci satysfakcji

0

Proponuję zmienić Obj-C na Swift, podobne możliwości, lepsza przyszłość, bo Swift w zamyśle ma zastępować Obj-C, no i najważniejsze, Swift wygląda jak normalny język programowania, natomiast Obj-C ma bardzo specyficzną składnie, nie spotykaną w innych :)

1

self działa prawie tak samo jak this w innych językach (c++, java, C#, ...). (to "prawie" widać np w metodach init).
self.firstName to po prostu odwołanie się do property na sobie samym.

emfałsi napisał(a):

Proponuję zmienić Obj-C na Swift, podobne możliwości, lepsza przyszłość, bo Swift w zamyśle ma zastępować Obj-C, no i najważniejsze, Swift wygląda jak normalny język programowania, natomiast Obj-C ma bardzo specyficzną składnie, nie spotykaną w innych :)

Po przyzwyczajeniu się, sposób wywoływania metod z Obj C bardziej mi się podoba. A objective C jeszcze długo będzie pierwszym językiem dla iOS i OS X i nie jestem przekonany, że kiedyś zostanie wyparty przez Swift-a.

0

Popatrz na wszelkie rankingi jak TIOBE czy popularność w wyszukiwarkach, Swift idzie ostro w górę, natomiast Obj-C ostro w dół, dodatkowo jest wspierany przez Apple bardziej niż Obj-C, na dniach wychodzi Swift 2.0, więc podejrzewam, że pomijając 'legacy code' większość nowych apek będzie już robiona w Swift'ie w coraz większym odsetku :)

0
emfałsi napisał(a):

Proponuję zmienić Obj-C na Swift, podobne możliwości, lepsza przyszłość, bo Swift w zamyśle ma zastępować Obj-C, no i najważniejsze, Swift wygląda jak normalny język programowania, natomiast Obj-C ma bardzo specyficzną składnie, nie spotykaną w innych :)

Poruszyłeś bardzo dobry temat. Sam zastanawiam się nad Obj-C i teraz dałeś mi zagwostkę, bo kompletnie nie ma sensu uczyć się czegoś, co za chwilę przejdzie do lamusa. Skąd masz informację, że Swift ma w zamyśle zastąpić Obj-C?:)

0

Fasadin, MarekR22, dziękuję bardzo.
Jak części początkujących wydawało mi się, że do firstName moża się odwołać bez niczego, a tu oczywiście potrzebne jest self
Sprawa prawie oczywista, ale Objective-C nie jest taki oczywisty zatem wolałam się dopytać.

Przy okazji wywołując temat Objective-C vs Swift.

Mi się wydaje że Apple wprowadza Swift, także dlatego bo zbyt dużo ludzi odbija się od Objective-C.
Przejście dla niektórych programistów na Objective-C nie jest takie przyjemne.
Im mniej programistów danego języka tym wyższe ceny.

Co do tego jakie usprawnienia wprowadza Swift, nie mnie się wypowiadać.

Na pewno więcej materiałów jest na temat Objective-C, a Swift powoli się rozwija.
Wydaje mi się że jak ktoś programujący w Swift trafi do zespołu gdzie trzon stanowią ci z Objective-C to będzie musiał się dostosować.

Jakiś czas temu pytałam znajomego który język mi doradza, powiedział mi że dla niego Swift jeszcze przez dłuższy czas będzie się przebijał.

0
kiteboarder napisał(a):
emfałsi napisał(a):

Proponuję zmienić Obj-C na Swift, podobne możliwości, lepsza przyszłość, bo Swift w zamyśle ma zastępować Obj-C, no i najważniejsze, Swift wygląda jak normalny język programowania, natomiast Obj-C ma bardzo specyficzną składnie, nie spotykaną w innych :)

Poruszyłeś bardzo dobry temat. Sam zastanawiam się nad Obj-C i teraz dałeś mi zagwostkę, bo kompletnie nie ma sensu uczyć się czegoś, co za chwilę przejdzie do lamusa. Skąd masz informację, że Swift ma w zamyśle zastąpić Obj-C?:)

Z perspektywy nauki Swift'a, jak patrzę teraz na kod Obj-C to wydaje się on podobny, bazując na tej samej bibliotece/frameworku Apple'owym, biorąc pod uwagę nazwy metod/funkcji/sposób programowania. Co mnie natomiast odrzucało, to jego składnia, która dla mnie jest nie do strawienia. Swift ma dopiero lekko ponad rok, a już jakąś część rynku zdobył, mam wielką nadzieję, że w perspektywie 2-3 lat zastąpi w dużym stopniu Obj-C, co wcale nie jest takie nieprawdopodobne :)

0

emfałsi, rozumiem, że programujesz w Obj-C a Swift na razie tylko śledzisz? ciekawa sprawa z tym Swiftem, szczególnie dla takich osób jak ja, które chcą się nauczyć nowego języka i stoją przed wyborem "dziwny, być może wypierany Obj-C", a "nowy, przyjaźniejszy Swift". ale wydaje mi się, że jeżeli coś jest przyjaźniejsze, to szybko zyska duże grono zwolenników. zostaje kwestia pracy w zespołach programistycznych, tak jak napisała MarBa i szereg innych problemów, ale to chyba kwestia czasu, jak doczekamy zmiany ról. ja chyba zacznę od tego Swifta i zobaczymy jak to idzie :)

0
MarBa napisał(a):

Jak części początkujących wydawało mi się, że do firstName moża się odwołać bez niczego, a tu oczywiście potrzebne jest self

Można bez self ale jest to niewskazane bo wtedy pomijasz KVO (doczytasz później co to za dziwactwo).
Jeśli użyjesz @synthesize na property wtedy mozna się dostać sie do firstName tak samo jak w przypadku C++ do pól (bez self). przy braku @synthesize do pola też można się dostać bezpośrednio ale stosując prefix podkreślenia: _firstName.
Jednak zdecydowanie lepiej stosować self.

1 użytkowników online, w tym zalogowanych: 0, gości: 1