<include> e <snippets> vs. <embed>

A prima vista, <include> e <snippets> forniscono funzionalità piuttosto simili all'incorporamento: consente di riutilizzare alcune porzioni di codice tra le estensioni. Allora qual è la differenza tra questi approcci e quando dovresti usarli?

La differenza fondamentale tra questi concetti è che le estensioni integrabili sono un fascio più stretto. Esse combinano il codice completo di una GUI per generare codice R da questo, e una pagina di aiuto. Al contrario, include e insert consentono un controllo molto più granulare, ma al prezzo di una minore modularità.

Cioè, un'estensione che incorpora un'altra estensione in genere non avrà bisogno di sapere molto sui dettagli interni dell'estensione incorporata. Un ottimo esempio è l'estensione plot_options. Le estensioni che desiderano incorporarla non devono necessariamente conoscere tutte le opzioni fornite o come vengono fornite. Questa è una buona cosa, altrimenti una modifica nell'estensione plot_options potrebbe rendere necessario modificare tutte le estensioni che la incorporano (molti). Al contrario, include e insert espongono davvero tutti i dettagli interni e le estensioni che li utilizzano, ad esempio, dovranno conoscere gli ID esatti e forse anche il tipo degli elementi utilizzati.

Quindi la regola pratica è questa: include e insert sono ottimi se le opzioni pertinenti sono necessarie solo per un gruppo chiaramente limitato di estensioni. Le estensioni incorporate sono migliori, se il gruppo di estensioni a cui può essere utile non è chiaramente definito e se la funzionalità può essere facilmente modularizzata. Un'altra regola pratica: se potete mettere le parti comuni in un singolo «blocco», allora fatelo e usate l'incorporamento. Se hai bisogno di molti piccoli frammenti per definire le parti comuni, beh, usate <snippets>. Un ultimo modo di vedere la cosa: se tutte le estensioni forniscono funzionalità altamente simili, gli include e gli inserti sono probabilmente una buona idea. Se condividono semplicemente uno o due «moduli» comuni, probabilmente è meglio incorporarli.