Lecture 4-5

This commit is contained in:
2025-10-30 17:38:41 +03:00
parent cf48b0ca1b
commit ef82d8b960

260
lec/4-5.md Normal file
View File

@@ -0,0 +1,260 @@
# LEC 4-5. Java-bruh-script
## History
При разработке отталкивался от языков:
- Self - диалект Small Talk (первый ООП-подобный язык)
- Scheme - функциональное программирование
## Особенности
- Мультпарадигменность
- Динамическая типизация
- Автоматическая работа с памятью и сборка мусора
## Лексическая структура
- Unicode
- Чувствительность к регистру
- Комментарии в C++ style
- Необязательность к ;
## Типы данных
Простейшие типы:
- number (8 byte)
- string
- boolean
Тривиальные типы:
- null
- undefined
Составные типы:
- object
- array (type of object)
Специальные типы:
- functions
- Стандартные классы
- Date
- RegExp
- Error
- Math
## Проверка на равенство и идентичности в JS
=== - идентичность - максимально строгое сравнение
== - равенство - допустимо приведение типов
- null and undefined - равны
- string -> number
## Преобразование типов
- string (String, toString, toFixed, toExponential, toPrecision)
- number (Number, parseInt, parseFloat)
- default
## Функции
```js
function someFunc(x, y, z){
if (x === undefined){
x = 1;
}
y = y || 555;
var a = 25;
return x * y + z / a;
}
```
или
```js
var someFunc = function(x) {return x * x;}
```
или
```js
var f = function fact(n){
return n > 1
? n * fact(n-1)
: 1;
};
```
или
```js
var arr = [1,2,3];
arr.sort(function(left, right) {
return right - left;
});
```
или если хочется взлома ~~жопы~~
```js
var square = new Function("x", "return x * x;");
```
## Объекты
### Создание
```js
var obj1 = new Object()
var obj = {};
var obj3 = {a: 100;};
```
### Свойства
- Ключ-строка
- Значение - любой тип данных, включая объект
- Флаги: writable, enumerable, configurable
### Удаление объекта
```js
delete obj.prop1;
```
### Проверка существования свойства
```js
if ('prop1' in obj){}
if (obj.prop1 === undefined){}
if (obj.hasOwnProperty('prop1')){}
```
### Доступ к свойствам
```js
obj.prop1
obj['prop-2']
obj[p]
```
### Перебор свойств объекта
```js
for (var key in obj) {};
Object.keys(obj);
```
## Массивы
### Создание массива
```js
var a = new Array(1.2, "text", true, {x:1});
var b = new Array(10); // массив из undefined
var c = [];
c[0] = 1;
```
### Fun work
```js
var arr = [];
arr[10]= 'hi';
console.log(arr.length); // 11
```
### Методы массивов
- Добавление/удаление
- pop/push (конец)
- shift/unshift (начало)
- Преобразование из строки в массив
- split
- join
- slice
- splice
- sort
## Области видимости
Всё как в обычных ЯП
## Замыкание
Замыкание = (функция) + внешнее лексическое окружение
```js
function makecount(){
var cur_co = 1;
return function(){
return cur_co++;
};
}
var counter = makecount();
```
## Контекст-this
```js
var admin = {name: "PIE"}
var user = {name : "CHOCO"}
function func(){
alert(this.name)
}
admin.g = func;
user.u = func;
admin.g(); // PIE
user.u(); // CHOCO
func() // undefined
```
### Манипуляции с контекстом
- ```func.call(context, arg1 arg2, ...);``` - вызывает функцию однократно
- ```func.apply(context, [arg1, arg2, ...]);``` - то же самое, но с двумя аргументами
- ```var wrapper = func.bind(context[, arg1, arg2, ...]);``` - создание копии функции, но фиксируется контекст функции и аргументы - карирование
## ООП-функциональный стиль
Задание публичного:
- метода
```js
this.getVar = function(){
return _another;
};
```
- свойства:
```js
this._dem = 1;
```
Приватное свойство и/или метод задаётся так же, но без ```this```.
### Наследование
Базовый класс
```js
function A(){
this.enable = function(){
...
}
...
}
```
Производный класс
```js
function B(){
Machine.call(this, [, arg1, ...]);
// Machine.apply(this, [, args]);
...
}
```
## Прототипный стиль ООП
Функции остались (блень)
Базовый класс
```js
var car {
fuel: 0.7;
fph: 9.;
ride: function(dist){
...
};
}
```
Производный класс:
```js
var truck {
longback: true;
__proto__: car;
}
truck.ride();
```
```js
obj.hasOwnProperty()
Object.getPrototypeOf(obj, [proto])
obj1 instanceof obj2
obj2.isPrototypeOf(obj1)
```
В прототипном стиле все поля пубичные
## Обработка операций
Событийно-ориентированный