Jak nazywa się ta forma określania zakresu? [duplikować

To pytanie ma już odpowiedź tutaj:

Objective-C Deklaruj zmienne za pomocą ({…}) 1 odpowiedź

Mniej więcej przypadkowo natknąłem się na tę formę określania zakresu

DataSource *dataSource =({
    NSInteger idx = [[self.tableView indexPathForSelectedRow] row];
    DataSource *dataSource = [DataSource new];
    dataSource.address = self.destinations[idx][0];
    dataSource.name    = self.destinations[idx][1];
    dataSource;
});

Myślę, że to dobry sposób na tworzenie i tworzenie instancji obiektów i zmiennych, ponieważ zmienne tymczasowe będą istnieć tylko tak długo, jak długo będą potrzebne do stworzenia obiektu, którego naprawdę potrzebuję i którym się troszczę. W kodzie powyżejidx zniknie, gdy tylko napiszę wewnętrznydataSource do zewnętrznejdataSource, ponieważ zakres zostanie wkrótce opuszczony.
Uważam również za atrakcyjny fakt, że w pełni utworzony i skonfigurowany obiekt zostanie ustawiony na obiekt zewnętrzny.
Właściwie nie wiem nawet, czy jest to funkcja C lub Objective-C, czy cukierek składniowy dodany do brzęku.

@ Unheilig
to jest składnia do porządkowania kodu. to nie jest coś takiego jak blok lub zamknięcie. na końcu kodu masz tylko w pełni utworzony i skonfigurowany obiekt.

Przydaje się to, jeśli potrzebujesz tylko obiektu, aby przekazać go jako argument do metody, ale konfiguracja tego obiektu wymaga więcej niż jednej instrukcji. Zamiast przypisywać ją do lokalnej zmiennej tymczasowej, można przekazać wyrażenie instrukcji.

[[MYViewController alloc] initWithDataSource:({
    NSInteger idx = [[self.tableView indexPathForSelectedRow] row];
    DataSource *dataSource = [DataSource new];
    dataSource.address = self.destinations[idx][@"address"];
    dataSource.name    = self.destinations[idx][@"name"];
    dataSource;
})];

W środowisku innym niż ARC można nawet wywołać autorelease w instrukcji wyrażenia.

Więc to chyba tylko organizacja kodu i dużo osobistego gust

questionAnswers(1)

yourAnswerToTheQuestion