Scala. Профессиональное программирование [Мартин Одерски] (pdf) читать постранично, страница - 4

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

.

180

Повторяющиеся параметры . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Именованные аргументы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Значения параметров по умолчанию . . . . . . . . . . . . . . . . . . . . . . 182
8.9. Тип SAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

183

8.10. Хвостовая рекурсия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

184

Трассировка функций с хвостовой рекурсией . . . . . . . . . . . . . . . 185
Ограничения хвостовой рекурсии . . . . . . . . . . . . . . . . . . . . . . . . 187
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

188

Глава 9. Управляющие абстракции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.1. Сокращение повторяемости кода . . . . . . . . . . . . . . . . . . . . . . . . . .

189
189

9.2. Упрощение клиентского кода . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

193

9.3. Карринг . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

195

9.4. Создание новых управляющих конструкций . . . . . . . . . . . . . . . . . .

196

9.5. Передача параметров по имени . . . . . . . . . . . . . . . . . . . . . . . . . . .

199

Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

202

Глава 10. Композиция и наследование . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.1. Библиотека двумерной разметки . . . . . . . . . . . . . . . . . . . . . . . . . .

203
203

10.2. Абстрактные классы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

204

10.3. Определяем методы без параметров . . . . . . . . . . . . . . . . . . . . . . .

205

10.4. Расширяем классы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

208

10.5. Переопределяем методы и поля . . . . . . . . . . . . . . . . . . . . . . . . . .

210

10.6. Определяем параметрические поля . . . . . . . . . . . . . . . . . . . . . . .

211

10.7. Вызываем конструктор суперкласса . . . . . . . . . . . . . . . . . . . . . . . .

212

Оглавление   11

10.8. Используем модификатор override . . . . . . . . . . . . . . . . . . . . . . . . .

213

10.9. Полиморфизм и динамическое связывание . . . . . . . . . . . . . . . . . .

215

10.10. Объявляем финальные элементы . . . . . . . . . . . . . . . . . . . . . . . .

217

10.11. Используем композицию и наследование . . . . . . . . . . . . . . . . . .

218

10.12. Реализуем методы above, beside и toString . . . . . . . . . . . . . . . . . . 220
10.13. Определяем фабричный объект . . . . . . . . . . . . . . . . . . . . . . . . .

223

10.14. Методы heighten и widen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

224

10.15. Собираем все вместе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

228

Глава 11. Трейты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.1. Как работают трейты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

229
229

11.2. Сравнение «тонких» и «толстых» интерфейсов . . . . . . . . . . . . . . .

232

11.3. Трейты как наращиваемые модификации . . . . . . . . . . . . . . . . . . .

235

11.4. Почему не используется множественное наследование . . . . . . . . .

239

11.5. Параметры трейтов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

243

Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

245

Глава 12. Пакеты, импорты и экспорты . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.1. Помещение кода в пакеты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

247
247

12.2. Краткая форма доступа к родственному коду . . . . . . . . . . . . . . . .

249

12.3. Импортирование кода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

252

12.4. Неявное импортирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

255

12.5. Модификаторы доступа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

256

Приватные члены . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
Защищенные члены . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Публичные члены . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Область защиты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Видимость и объекты-компаньоны . . . . . . . . . . . . . . . . . . . . . . . 260
12.6. Определения верхнего уровня . . . . . . . . . . . . . . . . . . . . . . . . . . .

261

12.7. Экспорты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

262

Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

265

Глава 13. Сопоставление с образцом . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.1. Простой пример . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

266
266

case-классы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Сопоставление с образцом . . . . . . . . . . . . . . . . . . . . . . . .