Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Appunti JavaScript ad oggetti e procedurale, Appunti di Programmazione Orientata agli Oggetti

Appunti di JavaScript ad oggetti e procedurale

Tipologia: Appunti

2023/2024

Caricato il 20/09/2024

Fra7893
Fra7893 🇮🇹

1 documento

1 / 16

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
JavaScript
1
JavaScript
Nasce nel 1995
NetScape aveva prodotto il primo browser.
Nella versione 2.0 di NetScape introduce un linguaggio chiamato JavaScript
linguaggio apposito per eseguire il codice nel browser
Il linguaggio è sviluppato da Brendan Eich
JavaScript, viene introdotto on Java per puro scopo di marketing, per
ammiccare ai linguaggi più conosciuti in quel momento storico (c, c++ e Java)
ECMAScript è stato un tentativo di aavere una versione standard del linguaggio
di programmazione.
Microsoft attraversa il suo momento di crisi a causa della svalorizzazione del
potenziale degli smartphone.
JavaScript è diventato il linguaggio più disponibile del mondo
ECMAScript (standard ECMA262
JavaScript è stata un implementazione di ECMAScript pensata per girare
(tipicamente) nel browser
La versione di riferimento di questo corso sarà ECMAScript 6
Caratteristiche del linguaggio:
Sintassi simile a quella del neonato Java
Il linguaggio è tipato in modo dinamico, e in modo debole
Le variabili sono dichiarate senza tipo
Assume il tipo del suo valore
La stessa variabile può assumere valori di tipi diversi
let a; // a è una costate udefined
a = 1;
a = "Stringa";
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff

Anteprima parziale del testo

Scarica Appunti JavaScript ad oggetti e procedurale e più Appunti in PDF di Programmazione Orientata agli Oggetti solo su Docsity!

JavaScript 1

JavaScript

Nasce nel 1995 NetScape aveva prodotto il primo browser. Nella versione 2.0 di NetScape introduce un linguaggio chiamato JavaScript linguaggio apposito per eseguire il codice nel browser Il linguaggio è sviluppato da Brendan Eich JavaScript, viene introdotto on Java per puro scopo di marketing, per ammiccare ai linguaggi più conosciuti in quel momento storico (c, c++ e Java)

ECMAScript è stato un tentativo di aavere una versione standard del linguaggio di programmazione. Microsoft attraversa il suo momento di crisi a causa della svalorizzazione del potenziale degli smartphone. JavaScript è diventato il linguaggio più disponibile del mondo ECMAScript (standard ECMA 262  JavaScript è stata un implementazione di ECMAScript pensata per girare (tipicamente) nel browser La versione di riferimento di questo corso sarà ECMAScript 6

Caratteristiche del linguaggio:

Sintassi simile a quella del neonato Java Il linguaggio è tipato in modo dinamico, e in modo debole Le variabili sono dichiarate senza tipo Assume il tipo del suo valore La stessa variabile può assumere valori di tipi diversi

let a; // a è una costate udefined a = 1; a = "Stringa";

JavaScript 2

Le stringhe possono essere scritte tra apici doppi e normali;

let a = 1; let b = '1'; if (b == a){} //ritorna true

Il linguaggio è interpretato e non compilato. Linguaggio cross platoform.

RUNTIME ENGINE JAVASCRIPT

Runtime Engine JavaScript è lʼinterprete del nostro codice, capace di eseguire il codice sorgente. Tecnica di compilazione è la JIT Just In Time), cioè compila il codice al volo per il processore

Principali Runtime sono

Chrome V SpiderMonkey Chakra

Node.js

runtime engine basato su V supportato da Linux Foundation Undefined è un valore preciso e non dato casualmente

Elementi di base Un applicazione JavaScript è una collezione di file con estensione .js , nella stragrande maggioranza dei casi è possibile seguire le indicazioni sintattiche del C e le cose “funzionanoˮ.

JavaScript 4

number : virgola mobile, 64bit, NaN Not a Number) non è un errore ma indica una cosa impossibile ad esempio (n / 0 string : carattere UNICODE undefined : unico tipo Undefined null;

Dichiarazione delle variabili

let dichiara una variabile con block scope, non è possibile dichiararne il tipo. undefined, il valore delle variabili dopo la dichiarazione NON è casuale, inizializzazione automatica con valore speciale, ovvero la costante undefined

let a; console.log(a)

const: dichiara una costante con block scope, non si può dichiarare il tipo ed è necessaria lʼinizializzazione.

Oggetti in JavaScript

Js è un linguaggio ibrido Fornisce una serie di oggetti predefiniti

Type Cohercion

Conversione ti tipo valore implicita Attenzione a cosa succede dietro le quinte 10 ʼ 5 ʼ // “105ˮ cohercion a string di 10 ‘10ʼ5 // “105ˮ cohercion a string di 5 ‘10ʼ5//5, cohercion a number di 10 (questo perche js non sa fare sottrazioni con le stringhe) parseInt(ʼ 10 ʼ)  5 //15, conversione esplicita

Confronto tra valori

===, ! confrontano valore e tipo

JavaScript 5

==, ! confrontano type con cohercion Esempi 1  1 //true 1  ‘1ʼ //false 1  ‘1ʼ // true

Alcune regole di cohercion

undefinde diventa false in un contesto Boolean undefined diventa NaN in un contesto Number null diventa false in un contesto Boolean null diventa 0 in un contesto Number

Funzioni utili

parseInt(), parseFloat() isNaN()

Corto circuito

Il calcolo di unʼespressione booleana viene interrotto non appena il valore è definito:

(b !== 0) && (a % b === 0) se b è 0 il modulo non viene calcolato, quindi si interromope

Stringhe

Sono sequenze di caratteri tra apici singoli o doppi, lʼoperazione fondamentale è la concatenazione, costruisce una nuova stringa con tutti i caratteri della prima e della seconda, con cohercion. Le stringhe sono degli oggetti, la notazione posizionale è ispirata al C/C restituisce il carattere in posizione (base 0

let a = 'test' ; s[1] //restituisce e //T e s t //0 1 2 3

JavaScript 7

Le librerie devono essere importate utilizzando lʼistruzione require() per definire un nuovo oggetto.

let stdin = require("readline-sync");

Node ha un prorpio package manager per la gestione delle librerie e delle loro dipendenze. Il Node Package Manger (npm) permette di scaricare dai repository predefiniti ed installare una libreria:

//nel cmd npm install <<nome-libreria>> npm install readline-sync //Oppure npm i readline-sync

Utilizzare readline-sync

Utilizziamo un input non formattato con = stdin.question() Utilizziamo un input formattato con stdin.questionInt() o anche stdin.qeustionFloat(). Per effettuare una convalida dei dati il codice è:

let stdin = require("readline-sync"); //importiamo la libreria let raggio = stdin.questionInt('Immetti raggio');//utilizziamo while(raggio <= 0){ raggio = stdin.questionInt('ERRORE ripeti');// riutilizzia }

Strutture di controllo

JavaScript 8

Sono identiche a quelle viste in C, sono gruppi di istruzioni tra parentesi graffe.

Sottoprogrammi

Sono molto simili a quelli già visti in passato, ma con alcune particolarità importanti, i sottoprogrammi possono essere funzioni o procedure, i sottoprogrammi hanno parametri e argomenti. Parametri e tipo non sono tipati le funzioni utilizzano il return le prcedure utilizzano rturn, hanno una semantica ordinaria. I parametri sono esclusivamente per valore, quindi con riferimento ai tipi di base NON è possibile modificare lʼargomento utilizzando il parametro. Quindi le procedure non modificano il valore, infatti per modificarlo bisogna utilizzare una funzione che restituisce un nuovo valore, e modificare lʼargomento direttamente nel chiamante.

Parametri opizionali

Non necessariamente parametri ed argomenti devono coincidere in numero, dato che alcuni argomenti possono essere (^) undefined

Valori di default

In JavaScript è possibile assegnare un valore di default agli argomenti, il valore viene utilizzato nel caso in cui lʼargomento fornito sia undefined, ma ha senso solo sui parametri in coda alla dichiarazione, ha senso solo su parametri in coda alla dichiarazione

function somma ( a, b = 1){ return a + b; } somma(1 ,2) // return 3 somma(1)//return 2

Gli Array in JavaScript

Gli elementi non sono tipati e la loro dimensione è dinamica

JavaScript 10

eliminazione in testa: a.shift(v) operazioni in posizione i: a.splice()

Sintassi di splice

a.splice(, <#daRimuovere>, , )

parte da posizione pos, elimina #daRimuovere elementi aggiunge al loro posto v1, v2..

a.splice(3, 0, v)//aggiunge v in posizione 3 a.splice(3, 1)//elimina in posizione 3

Data lʼesistenza agli oggetti in JavaScript non esistono i Record, nel seguito vediamo gli oggetti come “super-recordˮ, ovvero collezione di attributi.

JavaScript POO

JavaScript POO 1

JavaScript POO

Come scrivere JavaScrtp ad oggetti, permette di programmare in procedurale e ad oggetti. Lʼunica differenza che la programmazione ad oggetti è molto diversa da quella procedurale, lʼobbiettivo finale è quella di produrre applicazioni che funzionano come quelle in Java.

Introduzione

JavaScript è un linguaggio ibrido consenti di programmare con gli oggetti, ma è basato su concetti completamente diversi rispetto a Java. Java non è un linguaggio dinamico a differenza di JavaScript dove posso aggiungere e togliere delle proprietà, quindi ci sono delle differenze sostanziali. La programmazione in Js è complicata, essendo un linguaggio non tipato ha limiti significativi per lo sviluppo in medio ed in grande, la sua natura lo rende uno strumento utile per scrivere un applicazione “giocattoloˮ con le conoscenze attuali, però è necessario conoscere i concetti perchè la piattaforma è molto utilizzata.

Transpiling

Tecnica che prevede lʼutilizzo di un linguaggio di programmazione tipato e più pulito Il cui codice può essere tradotto verso versioni diverse di ECMAScript/JavaScript Principali esempi possono essere TypeScript(Mircosoft) e Dart(Google), hanno entrabi dei propri transpiler, che generano le applicazioni Web in modo più veloce e sicuro per evitare errori.

Tipi di dato

Esistono due categorie, dati primitivi come boolean, number, string, undefined e null. Vengono confrontati per valore

Tipi riferimento

JavaScript POO 3

Nelle classi il comportamento è sempre strict , si utilizza la parola chiave constructor che permette di creare il nostro costruttore , le proprietà non vengono dichiarate ma “utilizzateˮ, i messaggi richiedono this( this.menu() ) Posso esportare solo dopo aver dichiarato la classe.

module.exports = Calcolatrice; //Va scritto alla fine del programma, dopo aver dichiarato tu

Non troviamo parole come void,public, private ma abbiamo comunque creato un oggetto. //Vedere codice riferimento con const required Allʼinterno del main definisco la classe main

let calcolatrice = new Calcolatrice();

In JavaScript gli errori vengono visti solo durante lʼesecuzione e non durante la compilazione. Esiste il toString(); In Js le regole di visibilità sono diverse infatti, la clase deve essere dichiarate prima della direttiva exports, tutto è pubblico per default, NOTA in ES sono state introdotte le proprietà private con la sintassi #nome.

Getter e setter

Meccanismo per eseguire un metodo ogni colta che viene inviato un messaggio relativo ad una proprietà Sintassi:

get nomeProp(){ return ;} set nomeProp(e){...}

In generale è possibile riprodurre lʼimpostazione del codice di Java in JavaScript, ma attenzione alla natura non tipata del linguaggio, è molto più facile commettere errori che non vengono intercettati dal compilatore

Le classi ES

JavaScript POO 4

Per capire meglio le stranezze bisogna capire la natura degli oggetti di JavaScript bisogna capire il JSON JavaScript Object Notation), notazione standard per rappresentare gli oggetti di JavaScript sotto forma di stringa. Quindi posso rappresentare diversi oggetti in maniera stringa, lʼintera stringa è tra apici singoli, e le proprietà e valori tra doppi, i nomi delle proprietà sono stringhe, le liste sono rappresentate tramite il []

{ "nome": "Mario", "cognome": "Rossi", "matricola": 12345, "esami":[ { "insegnamento": "PP", "crediti": 15, "voto": 27, "lode": false } { "insegnamento": "Analisi", "crediti": 12, "voto": 30, "lode": false } ] }

Oggetto JSON

metodo JSON.parse(): costruisce un oggetto a partire da unʼespressione JSON. etodo JSON.stringify(): Trasforma un oggetto nella sua notazione JSON. Le stringhe JSON Senza apici) sono espressioni JS valide ed è possibile usarle per costruire un oggetto completo e assegnarlo ad un riferimento.

let p = {"x":1, "y":2}

JavaScript POO 6

dallʼinterprete, ma sollevano eccezione se la funzione relativa non esiste.

Array in JavaScript

Sono oggetti le cui proprietà sono denominato con indici interi : ‘0ʼ, ‘1ʼ, ecc. La proprietà length ha sempre valore pari al massimo indice delle proprietà  1

let array = ['a','b']; array[0] // a array.length // 2

Si possono analizzare tutte le proprietà di un oggetto tramite il ciclo for migliorato così da poter visitare tutte le chiavi presenti nel dizionario.

let o = { ... } for(let p in o) { console.log(o[p]); }

Aspetti negativi da ricordare

Gli editor di Js non forniscono supporto Si possono commettere molto facilmente errori nei messaggi in JavaScript s.lunghezza vs s.lunghezza() Per il compilatore il primo caso è accettabile e restituisce undefined Essendo un linguaggio interpretato, molti errori logici sono latenti.