What are the advantages and or disadvantages of calling Handlers from a Library Script with “use Statements“ vs. the “Load Script” command?

In the first scenario, I have a script containing all of my handlers and snippets. The filename for this script is “Jimz_Handlerz.scpt” and it is located here… /Users/Smokestack/Library/Script Libraries

Calling the handler from a new AppleScript file requires me to declare my script library (line 1) and then I can call the handler at anytime I want with the second line. Like this:

use myHandlerz : script "Jimz_Handlerz.scpt"

myHandlerz's get_fileExtensions()

In this next scenario, I am using the “load script” command to load the exact same file as the first example but this file is located on the desktop

property jimzHandlerz : load script ¬
    (alias "Macintosh HD:Users:Smokestack:Desktop:Jimz_Handlerz.scpt")

jimzHandlerz's get_fileExtensions()

This is the actual handler containing the command I am calling from both different scenarios..

on get_fileExtensions()
    tell application "Finder"
        set theDownloadsfolder to (path to downloads folder)
        set theFiles to the name extension of every file of theDownloadsfolder
    end tell
    AST copy list theFiles without keeping duplicates -- Needs AppleScript Toolbox 2_0_8.osax Scripting Addition in /Users/"Name"/Library/ScriptingAdditions
end get_fileExtensions

So I guess my question is, are there situations I would rather use scenario one and other situations where scenario two would be better?

Update:

Here is a cool little tidbit of information: Using the scenario of calling handlers from a script library script or script bundle file as in the first example of my original question.. If the current script, that we are calling on an external script from a library, is a script bundle and we include a folder inside the “Resources” folder called “Script Libraries” containing the script or script bundle we are calling our external handlers from, if the file in the system “Script Libraries” folder cannot be found, then this script will not throw an error because it searches the resources folder also for script libraries.

enter image description here


I have added a “script logger” to the beginning of every one of my scripts, which basically writes to file…. The script name and the time and date it was last run.

All of the commands for the logging, reside in a script object located in a separate file “Jimz_Handlerz.scptd” used as a script library which is located in my script libraries folder.


This following code, which is located in the file “Jimz_Handlerz.scptd”, is the script object which handles the logging

script scriptRunLog2
    try
        writeToFile()
    end try

    on writeToFile()
        set currentDate to (current date) as string
        -- The "." At The Beginning Of The Filename In The Next Line
        -- Makes That File A "Hidden" File
        set theFile to (path to desktop as text) & ".script_run_log.txt" 
        set theFile to POSIX path of theFile
        set myName to name of (info for (path to me))
        set theText to myName & " was last run on " & currentDate
        try
            set writeToFile to open for access theFile with write permission
            write theText & linefeed to writeToFile as text starting at eof
            close access theFile
        on error errMsg number errNum
            close access theFile
            set writeToFile to open for access theFile with write permission
            write theText & linefeed to writeToFile starting at eof
            close access theFile
        end try
    end writeToFile
end script

There are two ways of which I can run the commands within that script object, from any other script file.

OPTION 1 Using the "load script" option inserted at the top of any other script file

property theLibrary : (path to home folder as text) & "Library:Script Libraries:Jimz_Handlerz.scptd"
property jimzHandlerz : load script alias theLibrary
run jimzHandlerz's scriptRunLog2

OPTION 2 Using the "use" option inserted at the top of any other script file. Because "Jimz_Handlerz.scptd" is located in my script libraries folder, I do not need to define its location

use jimzHandlerz : script "Jimz_Handlerz.scptd"
run jimzHandlerz's scriptRunLog2

In regards to the question in my original post…

if I use option 1, the script logger will log which script I ran along with the time and date.

However, if I use option 2, the script logger will log "Jimz_Handlerz.scptd" as the script running the code.

In short, in this scenario, it would be best to use option 1