<include> en <snippets> vs. <embed>

Op het eerste gezicht geven <include> en <snippets> mogelijkheden die nogal gelijk zijn aan inbedden: zij maken het mogelijk dat stukjes code in de plugins worden hergebruikt. Dus wat is het verschil tussen deze methoden van aanpak, en wanneer moet u welke gebruiken?

Het voornaamste verschil tussen deze concepten is dat in te bedden plugins een wat strakker geheel zijn. Zij combineren een complete GUI, code om R-code hieruit te genereren, en een help-pagina. In contrast daarmee maken include en insert meer fijncontrole mogelijk, maar ten koste van minder modulariteit.

Dit betekent dat een plugin die een andere plugin inbedt niets hoeft te weten over de interne details van de ingebedde plugin. Een goed voorbeeld hiervan is de plugin met plot-opties. Plugins waarin deze plugin wordt ingebed, hoeven niet noodzakelijk alle beschikbare opties te kennen, of hoe die te gebruiken. Dit is goed, omdat anders, als een plugin met plot_opties wordt gewijzigd, het nodig zal zijn om alle plugins die de plugin hebben ingebed, hieraan moeten worden aangepast. In tegenstelling daarmee, tonen include en insert al hun interne details, en plugins die daarvan gebruik maken, moeten -- bijvoorbeeld -- alle ids (namen) en misschien zelfs typen kennen van de gebruikte elementen.

De vuistregel is daarom als volgt: include en insert zijn prachtig als de relevante opties slechts nodig zijn in een duidelijk beperkte groep plugins. Ingebedde plugins zijn beter wanneer de groep plugins waarvoor ze bruikbaar zijn niet helder afgebakend is, en als hun functionaliteit gemakkelijk kan worden verdeeld over modules. Nog een vuistregel: als de gemeenschappelijke gedeelten in een enkel brokstuk kan worden gestopt, doe dat dan, en gebruik inbedden. Indien veel kleine snippets nodig zijn voor de gemeenschappelijke code -- wel -- gebruik dan <snippets>. Een laatste manier om het te bekijken: als alle plugins dezelfde zeer vergelijkbare functionaliteit hebben, zijn includes en inserts waarschijnlijk een goed idee. Indien zij slechts een of twee gemeenschappelijke modules delen, is inbedden waarschijnlijk beter.