Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
{"version":3,"sources":["components/home/Header.js","components/home/Features.js","components/home/Footer.js","components/home/Home.js","components/playground/Prompt.js","components/playground/Response.js","components/playground/Welcome.js","components/playground/Error.js","components/playground/Input.js","components/playground/Console.js","components/player/PromptoWorker.js","components/player/PromptoWorkerListener.js","components/playground/LineHandler.js","components/playground/DisplayHistory.js","components/playground/PromptHistory.js","components/playground/PromptData.js","components/playground/Repl.js","components/playground/Playground.js","components/tutorials/Tutorials.js","components/content/TopicList.js","components/content/TopicItem.js","components/content/Topic.js","components/reference/topics/Overview.js","components/reference/topics/Dialects.js","components/reference/topics/Keywords.js","components/player/PromptoHighlightRules.js","components/player/PromptoMode.js","components/player/PromptoPlayer.js","components/reference/topics/Comments.js","components/reference/topics/Annotations.js","components/reference/topics/Identifiers.js","components/reference/topics/types/TextType.js","components/reference/topics/types/IntegerType.js","components/reference/topics/types/DecimalType.js","components/reference/topics/types/BooleanType.js","components/reference/topics/types/CharacterType.js","components/reference/topics/types/DateType.js","components/reference/topics/types/TimeType.js","components/reference/topics/types/DateTimeType.js","components/reference/topics/types/PeriodType.js","components/reference/topics/types/UuidType.js","components/reference/topics/types/BlobType.js","components/reference/topics/types/ImageType.js","components/reference/topics/types/VersionType.js","components/reference/topics/types/AtomicTypes.js","components/reference/topics/types/ListType.js","components/reference/topics/types/SetType.js","components/reference/topics/types/RangeType.js","components/reference/topics/types/DictionaryType.js","components/reference/topics/types/CollectionTypes.js","components/reference/topics/types/DocumentType.js","components/reference/topics/types/AttributeType.js","components/reference/topics/types/EnumerationType.js","components/reference/topics/types/AnyType.js","components/reference/topics/types/MethodType.js","components/reference/topics/types/TypeType.js","components/reference/topics/types/IteratorType.js","components/reference/topics/types/CursorType.js","components/reference/topics/types/CodeType.js","components/reference/topics/types/VoidType.js","components/reference/topics/types/CssType.js","components/reference/topics/types/HtmlType.js","components/reference/topics/types/DbIdType.js","components/reference/topics/types/WorkerType.js","components/reference/topics/types/SpecialTypes.js","components/reference/topics/types/Types.js","components/reference/topics/Mutability.js","components/reference/topics/Testing.js","components/reference/topics/methods/Declaring.js","components/reference/topics/methods/Calling.js","components/reference/topics/methods/Arguments.js","components/reference/topics/methods/Overloading.js","components/reference/topics/methods/Abstract.js","components/reference/topics/methods/Methods.js","components/reference/topics/statements/Assignment.js","components/reference/topics/statements/IfElse.js","components/reference/topics/statements/Switch.js","components/reference/topics/statements/ForEach.js","components/reference/topics/statements/While.js","components/reference/topics/statements/DoWhile.js","components/reference/topics/statements/Return.js","components/reference/topics/statements/Write.js","components/reference/topics/statements/Store.js","components/reference/topics/statements/StoreThen.js","components/reference/topics/statements/FetchThen.js","components/reference/topics/statements/Flush.js","components/reference/topics/statements/CallThen.js","components/reference/topics/statements/Statements.js","components/reference/topics/expressions/Precedence.js","components/reference/topics/expressions/Parenthesis.js","components/reference/topics/expressions/Nothing.js","components/reference/topics/expressions/This.js","components/reference/topics/expressions/Equality.js","components/reference/topics/expressions/Comparison.js","components/reference/topics/expressions/Minus.js","components/reference/topics/expressions/Add.js","components/reference/topics/expressions/Subtract.js","components/reference/topics/expressions/Multiply.js","components/reference/topics/expressions/Divide.js","components/reference/topics/expressions/Logical.js","components/reference/topics/expressions/Ternary.js","components/reference/topics/expressions/Item.js","components/reference/topics/expressions/Slice.js","components/reference/topics/expressions/Filter.js","components/reference/topics/expressions/SortNatural.js","components/reference/topics/expressions/SortCustom.js","components/reference/topics/expressions/SortAdvanced.js","components/reference/topics/expressions/Sort.js","components/reference/topics/expressions/Contain.js","components/reference/topics/expressions/Type.js","components/reference/topics/expressions/Member.js","components/reference/topics/expressions/Method.js","components/reference/topics/expressions/Code.js","components/reference/topics/expressions/Read.js","components/reference/topics/expressions/Fetch.js","components/reference/topics/expressions/Expressions.js","components/reference/topics/errors/Syntax.js","components/reference/topics/errors/BuiltIn.js","components/reference/topics/errors/Custom.js","components/reference/topics/errors/Errors.js","components/reference/topics/categories/Creating.js","components/reference/topics/categories/Copying.js","components/reference/topics/categories/Embedding.js","components/reference/topics/categories/Modifying.js","components/reference/topics/categories/Storing.js","components/reference/topics/categories/Extending.js","components/reference/topics/categories/methods/Definition.js","components/reference/topics/categories/methods/Calling.js","components/reference/topics/categories/methods/Arguments.js","components/reference/topics/categories/methods/Overloading.js","components/reference/topics/categories/methods/Overriding.js","components/reference/topics/categories/methods/Getters.js","components/reference/topics/categories/methods/Setters.js","components/reference/topics/categories/methods/Operators.js","components/reference/topics/categories/Methods.js","components/reference/topics/categories/Abstract.js","components/reference/topics/categories/Categories.js","components/reference/topics/Singletons.js","components/reference/topics/Enumerations.js","components/reference/topics/Resources.js","components/reference/topics/widgets/ReactState.js","components/reference/topics/widgets/ReactProperties.js","components/reference/topics/widgets/ReactLifecycle.js","components/reference/topics/widgets/ReactRendering.js","components/reference/topics/widgets/ReactWidget.js","components/reference/topics/widgets/ReactModal.js","components/reference/topics/widgets/Widgets.js","components/reference/topics/events/ClickEvent.js","components/reference/topics/events/InputChangedEvent.js","components/reference/topics/events/RadioChangedEvent.js","components/reference/topics/events/Events.js","components/reference/topics/Workers.js","components/reference/topics/bindings/Methods.js","components/reference/topics/bindings/Categories.js","components/reference/topics/bindings/Bindings.js","components/search/SearchEngine.js","components/reference/Reference.js","components/libraries/topics/Overview.js","components/libraries/topics/console/print.js","components/libraries/topics/console/printLine.js","components/libraries/topics/console/Buffer.js","components/libraries/topics/console/Console.js","components/libraries/topics/Attributes.js","components/libraries/topics/Maths.js","components/libraries/topics/Utilities.js","components/libraries/topics/Parsing.js","components/libraries/topics/cloud/AWS.js","components/libraries/topics/cloud/Cloud.js","components/libraries/topics/Files.js","components/libraries/topics/internet/Url.js","components/libraries/topics/internet/Email.js","components/libraries/topics/internet/Internet.js","components/libraries/topics/data/CSV.js","components/libraries/topics/data/JSON.js","components/libraries/topics/data/YAML.js","components/libraries/topics/data/Data.js","components/libraries/topics/server/Methods.js","components/libraries/topics/server/Services.js","components/libraries/topics/server/Server.js","components/libraries/topics/frameworks/ReactBootstrap3.js","components/libraries/topics/frameworks/ReactBootstrap4.js","components/libraries/topics/frameworks/Frameworks.js","components/libraries/topics/audit/Audit.js","components/libraries/Libraries.js","components/download/Download.js","components/download/Install.js","components/search/SearchBox.js","components/navigation/Navigation.js","App.js","reportWebVitals.js","index.js"],"names":["ALL_SLIDES","name","image","caption","Header","className","style","process","href","rel","target","tabIndex","map","s","src","alt","codeSnippet","Features","props","onClick","navigator","clipboard","writeText","history","push","emailRegExp","subscribe","event","preventDefault","form","currentTarget","formData","FormData","email","get","test","append","luxon","now","toISO","xhr","XMLHttpRequest","open","onreadystatechange","readyState","DONE","status","alert","onerror","send","console","error","Footer","id","onSubmit","type","placeholder","Home","section","URLSearchParams","window","location","search","divStyle","display","visible","Cursor","state","cursor","this","startBlinking","stopBlinking","blinker","setInterval","setState","clearInterval","color","backgroundColor","React","Component","Prompt","prompt","currentPrompt","renderIndents","beforeCursor","afterCursor","onChange","handleInput","autoComplete","autoCorrect","autoCapitalize","spellCheck","indentLevel","Array","fill","val","idx","Response","lines","response","data","split","filter","length","line","shift","renderIndenting","replace","match","Welcome","welcome","Error","Input","input","Console","addStyling","bind","nextProps","consoleElem","document","getElementsByClassName","height","width","textColor","fontSize","historyToDisplay","items","elem","renderHistory","Worker_fn","Worker","PROMPTO_WORKER","worker","PromptoWorker","onmessage","onMessage","nextMessageId","messageHandlers","msg","message","handler","inResponseTo","keepHandlerAlive","log","content","from","to","callback","verb","translated","postMessage","dialect","toStdOut","toStdErr","LineHandler","instructions","pattern","printHelp","doc","clear","showAll","deleteOne","reset","switchDialect","promptValue","promptData","promptHistory","displayHistory","collectMultiLine","handleEmptyLine","executeInstruction","interpretPrompto","trim","toLowerCase","instruction","find","i","promptItem","showRepl","out","err","forEach","item","substring","deleteRepl","resetRepl","toUpperCase","Set","has","forDialect","repl","klass","dialectHandlers","MLineHandler","endsWith","addLine","indent","linesBefore","allLines","clearLines","interpretPromptoML","ELineHandler","OLineHandler","DisplayHistory","stuff","isArray","concat","PromptHistory","index","direction","toggleUp","toggleDown","num","PromptData","cursorIdx","value","repeat","join","Repl","lineHandler","visibilityChanged","dispatchKeyDown","setUpStyles","listener","e","addEventListener","requestFocus","removeEventListener","textArea","getElementById","focus","newStyle","Object","keys","key","handleToggleHistory","moveCursor","tryDedent","shiftKey","dedent","handleSubmit","getValue","clearLine","evaluate","showPrompt","scrollIntoView","str","toggle","setValue","selectionStart","Number","isInteger","selectionEnd","INITIAL_HISTORY","Playground","observer","MutationObserver","handleMutation","observe","ReactDOM","findDOMNode","attributes","attributeFilter","disconnect","mutations","refs","ref","ALL_TUTORIALS","title","Tutorials","t","frameBorder","allow","allowFullScreen","download","TopicList","topic","topics","topicSelected","level","renderItem","activeTopic","TopicItem","collapsed","children","active","onSelect","renderChildren","Topic","parent","widget","c","forChild","asap","makeVisible","ThisTopic","marginLeft","String","raw","PromptoHighlightRules","keywordMapper","createKeywordMapper","$rules","start","token","regex","ace","acequire","TextHighlightRules","PromptoMode","editor","$id","$editor","$dialect","HighlightRules","Mode","DialectSwitcher","dialectSelected","ALL_DIALECTS","PlayerNavbar","d","renderTryItButton","runnable","runRequested","PlayerOutput","renderOutput","renderDoneButton","output","renderLine","dest","Fragment","text","done","doneRequested","PLAYER_KEY","PromptoPlayer","aceEditor","sampleUrl","lastIndexOf","setReadOnly","setShowPrintMargin","setHighlightActiveLine","renderer","setShowGutter","$cursorLayer","element","getSession","setMode","axios","then","resp","catch","translate","execute","stdout","stderr","addToOutput","nextCR","indexOf","addSingleLineToOutput","addMultiLinesToOutput","entry","startsWith","endsWithCR","pop","lastEntry","fullHeight","aceHeight","inputStyle","outputStyle","theme","mode","editorProps","$blockScrolling","Infinity","nextKey","TextType","IntegerType","DecimalType","BooleanType","CharacterType","DateType","TimeType","DateTimeType","PeriodType","UuidType","VersionType","BlobType","ImageType","ListType","SetType","RangeType","DictionaryType","VoidType","DbIdType","AnyType","CssType","HtmlType","IteratorType","CursorType","TypeType","MethodType","CodeType","WorkerType","AtomicTypes","CollectionTypes","DocumentType","AttributeType","EnumerationType","SpecialTypes","Declaring","Calling","Arguments","Overloading","Abstract","CallThenTopicItem","Assignment","IfElse","Switch","ForEach","While","DoWhile","Return","CallThen","Write","Store","StoreThen","FetchThen","Flush","SortNatural","SortCustom","SortAdvanced","Precedence","Parenthesis","Nothing","This","Equality","Comparison","Minus","Add","Subtract","Multiply","Divide","Logical","Ternary","Item","Slice","Filter","Sort","Contain","Type","Member","Method","Code","Read","Fetch","listStyle","Syntax","BuiltIn","Custom","Definition","Overriding","Getters","Setters","Operators","Creating","Copying","Embedding","Modifying","Storing","Extending","Methods","ReactLifecycle","ReactState","ReactProperties","ReactRendering","ReactWidget","ReactModal","ClickEvent","InputChangedEvent","RadioChangedEvent","Categories","tag","StopWordsMap","jssearch","Search","tokenizer","StopWordsTokenizer","SimpleTokenizer","addIndex","addTopic","Map","path","set","addTopicTitle","addDocuments","addTopicSentences","renderContent","toString","addTopicSentence","sentence","entries","slice","TOPICS","Overview","Dialects","Keywords","Comments","Annotations","Identifiers","Types","Mutability","Testing","Statements","Expressions","Errors","Singletons","Enumerations","Resources","Widgets","Events","Workers","Bindings","SearchEngine","Language","print","printLine","Buffer","AWS","Url","Email","JSON","CSV","YAML","Services","sort","replaceAll","ReactBootstrap3","ReactBootstrap4","Data","Internet","Frameworks","Server","Attributes","Maths","Utilities","Parsing","Cloud","Files","Audit","Libraries","Download","Install","Suggestion","suggestion","renderSentence","renderTopic","SearchBox","suggestions","reason","newValue","onSelectedSuggestion","inputProps","getSuggestionValue","renderSuggestion","shouldRenderSuggestions","highlightFirstSuggestion","onSuggestionsFetchRequested","fetchSuggestions","onSuggestionsClearRequested","clearSuggestions","onSuggestionSelected","Navigation","activeClassName","UIkit","use","Icons","App","libraries","reference","Navigator","withRouter","basename","exact","chapter","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","render","documentElement"],"mappings":"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","file":"static/js/main.b85e6046.chunk.js","sourcesContent":["const ALL_SLIDES = [\n\t{ name: \"Projects explorer\", image: \"projects-explorer.png\", caption: \"Create your project in seconds\"},\n\t{ name: \"Code editor\", image: \"code-editor.png\", caption: \"Start coding immediately\"},\n\t{ name: \"Try out\", image: \"try-out.png\", caption: \"Try out your app in less than a minute\"},\n\t{ name: \"Data explorer\", image: \"data-explorer.png\", caption: \"Explore application data\"},\n\t{ name: \"Stores explorer\", image: \"stores-explorer.png\", caption: \"Manage data stores\"},\n\t{ name: \"Debug server\", image: \"debug-server.png\", caption: \"Analyze and fix issues online\"},\n\t{ name: \"Deploy wizard\", image: \"deploy-wizard.png\", caption: \"Deploy to the cloud instantly\"},\n\t{ name: \"Tablet coding\", image: \"tablet-coding.jpg\", caption: \"Zero setup ! Enjoy mobility\"}\n];\n\nfunction Header() {\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
The full stack language
\n\t\t\t\t\t\t
hosted in the cloud
\n\t\t\t\t\t\t
Prompto frees you from time consuming tasks and lets you focus on making visible differences : creative web pages, meaningful data models and relevant business logic
Prompto natively supports HTML literals. Discover the power of plain CSS literals for styles used only once. You can combine local CSS styles to build conditional styles.
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
Enjoy powerful data literals
\n\t\t\t\t\t\t\t\t
List, set, dict, document - choose your collection literal. Date, time, dateTime and period literals that follow ISO 8601. You also have version and uuid literals.
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t
\t\t\t\n\t\t\t\t\t\t\t
\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t
\t\t\t\n\t\t\t\t\t\t\t
\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
Run the same code everywhere
\n\t\t\t\t\t\t\t\t
Thanks to its polyglot native bindings, prompto can run anywhere. Forget data transfer protocols, your models and your code are the same in the browser, on the server or in a forked process (C# code above abbreviated for presentation).
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
Store and fetch data in one statement
\n\t\t\t\t\t\t\t\t
Simply populate your instances, then call store. You can delete and store multiple instances in one ACID statement (if supported by the back-end data store). Fetching data has never been simpler, just call fetch.
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t
\t\t\t\n\t\t\t\t\t\t\t
\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t\n\t);\n}\n\nexport default Features;","import * as luxon from 'luxon';\n\n// eslint-disable-next-line\nconst emailRegExp = /^[^\\s()<>@,;:\\/]+@\\w[\\w\\.-]+\\.[a-z]{2,}$/i;\n\nfunction getTimestampString() {\n\treturn luxon.DateTime.now().toISO();\n}\n\nfunction subscribe(event) {\n\tevent.preventDefault();\n\tconst form = event.currentTarget;\n\tif(!form) {\n\t\tconsole.error(\"subscribe called outside a form!\");\n\t\treturn;\n\t}\n\tconst formData = new FormData(form);\n\tconst email = formData.get(\"email\");\n\tif(!emailRegExp.test(email)) {\n\t\talert(\"Please provide a valid email address\");\n\t\treturn;\n\t}\n\tformData.append('timeStamp', getTimestampString());\n\tvar xhr = new XMLHttpRequest();\n\txhr.open( 'POST', \"/public/v1/newsletter\", true );\n\txhr.onreadystatechange = function() {\n\t\tif(xhr.readyState === XMLHttpRequest.DONE) {\n\t\t\tconst status = xhr.status;\n\t\t\tif (status === 0 || (status >= 200 && status < 400))\n\t\t\t\talert(\"Your email has been registered.\")\n\t\t\telse\n\t\t\t\talert(\"An error occured, please contact support: [email protected]\");\n\t\t}\n\t}\n\txhr.onerror = function() {\n\t\talert(\"An error occured, please contact support: [email protected]\");\n\t}\n\txhr.send(formData);\n}\n\n\nfunction Footer() {\n\treturn (\n\t\t\n\n\t\t\t\n\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
Stay Tuned!
\n\t\t\t\t\t\t
Prompto is getting better every day. Join the prompto newsletter and stay updated.
\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
Join the newletter
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t\n\n\t\t\t
\n\t\t\t\t
Prompto is currently running its evaluation program. On-line development and deployment tools are available on request from Quartance.
\n\t\t\t\t
Prompto is looking for contributors. If you wish to participate, please contact us - [email protected].
\n\t\t\t
\n\n\t\t\t\n\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\tThe Prompto Java components are optimized using \n\t\t\t\t
This section describes the Prompto syntax and the built-in types. See the Libraries section for additional components.
\n\n
The Prompto language is designed to create business applications in the cloud.
\n\n
Business applications are applications which focus on business logic and user interaction,\n as opposed to middleware applications which focus on technical tasks such as data storage,\n message broadcasting, or web pages distribution. \n Business applications typically make heavy use of a data store, and span across multiple components:\n data store, back end and front end. \n Prompto is designed to help developers and organizations be more effective in building business applications. \n It achieves this by focusing on business logic, integration and presentation, while still relying for\n technical tasks\n on the exceptional ecosystems available from existing platforms.\n
\n\n
Run everywhere
\n\n
Business applications often involve UI, server-side business logic and data storage.\n This currently requires developing in multiple languages.\n Prompto removes this requirement by providing a single language for UI, server-side logic and data modelling. \n This is achieved by extending existing languages rather than replace them.\n There is a Prompto runtime for Java, C#, Python and JavaScript.\n Prompto does not compete with these languages, but rather complements\n them with a unique focus on data modeling, transfer and storage. \n
\n\n
Build and run in the cloud
\n\n
The Prompto language is designed for cloud deployment.\n A strong requirement of cloud deployment is that applications must be able to run on heterogeneous operating systems.\n This is because you can't instantaneously upgrade or migrate the OS on thousands of boxes.\n This ranges from minor OS patches to different OS (Linux, Windows, MacOSX).\n Prompto achieves this by distributing source code rather than machine code, and compiling/transpiling it on demand based on the environment.\n
\n\n
Easy integration
\n\n
Existing business applications are often built using languages such as Java, C#, Python, JavaScript or\n Swift. \n There is a Prompto runtime for each of the above host languages, and they are 100% compatible with each\n other. \n Prompto natively integrates with any web browser, any back end infrastucture, and rich clients such as\n Java RCP, .Net RCP\n and native iOS applications (Swift runtime not available yet).\n
\n\n
Interpreted and compiled
\n\n
Prompto runs in interpreted, compiled and transpiled mode. \n There are good reasons for supporting these 3 modes:\n
\n
\n
Compiled code runs much faster, it is the recommended server execution mode in production
\n
Transpiled code is mandatory for running in a browser.
\n
In scripting mode, and in the REPL, code is executed line by line, it cannot be compiled.
\n
Interpreted code can be modified without restarting the application, which makes development\n very productive. The interpreter is able to run incorrect code, notably tests, which can be useful during\n development, while incorrect code will fail to compile.\n
\n
\n
\n
\n \n
\n
Language
\n
Interpreter
\n
Compiler
\n
Transpiler
\n
Comments
\n
\n \n \n
\n
Java
\n
Available
\n
Available (JVM)
\n
n/a
\n
Interoperates with any JVM language
\n
\n
\n
C#
\n
Available
\n
Planned (CLR)
\n
n/a
\n
Interoperates with any CLR language
\n
\n
\n
Python 2/3
\n
Available
\n
n/a
\n
Planned
\n
\n
\n
\n
JavaScript
\n
Available
\n
Planned (WebASM)
\n
Available
\n
\n
\n
\n
Swift
\n
n/a
\n
n/a
\n
Planned
\n
Generated Swift code must be integrated
\n
\n \n
\n
\n
Statically inferred types
\n\n
Prompto uses static typing, like Java or C# do. This ensures best performance on all platforms. \n Prompto implements type inference, thus freeing the developer from having to declare obvious types: \n When writing a = 123 code, it is obvious that a is an integer, so there is no\n need to declare it. \n Method parameter types still need to be declared though, because they cannot be inferred.\n
\n\n
Reified attributes
\n\n
Prompto introduces reified attributes, a simple and effective way to model business data. \n Attributes are also known as fields, properties or columns. \n In most data models (relational, object, noSql), they have limited scope: table or object\n definition. \n Reified attributes are attributes defined globally. Being global, they become shared by all\n tables and object definitions. \n Amongst other benefits, reified attributes:\n
\n
\n
enable new search capabilities
\n
enable a single data model across all application tiers
\n
enable enterprise level controlled vocabularies
\n
enable semantic types, as opposed to technical types
Prompto names are global i.e. there is no concept of namespace in Prompto. \n At Prompto, we believe namespaces make sense for technical components, but not for business\n domains. \n If a given name has a different meaning in 2 departments of the same business, then it is likely to\n create business issues, unrelated to IT.\n That problem should be solved by adopting common terminology across departments, not through IT islands. \n A side-effect of having global names is that names need to be chosen carefully. \n At Prompto, we believe this is a feature: it encourages high quality of naming. \n
\n\n
Global and dynamic polymorphic methods
\n\n
Prompto methods can either be attached to object definitions or be global, like in Python or\n JavaScript. \n Prompto methods are polymorphic i.e. 2 methods with the same name can coexist if they accept a different\n set of parameters, like in Java or C#. \n However Prompto goes a step further by selecting the most appropriate method at execution\n time rather than compile time. \n This feature greatly simplifies development and data modeling, by eliminating the need for double dispatch.\n
\n\n
Prompto dialects: syntax is a detail
\n\n
To facilitate the conversation between all breeds of developers, Prompto comes with not one \"language\"\n but three. \n Prompto calls these dialects, as they are not different languages, but rather 3 syntactic\n variations of the same language concepts. \n They make it very easy for any developer to adopt the Prompto platform, regardless of his/her technical\n background. \n Prompto dialects seamlessly translate to one another. \n By doing so, they eliminate the barrier of having to learn a formal grammar only to read code. \n Prompto dialects are collaborative tools which help technologists work together.\n
\n\n
Disclaimer
\n
The Prompto language is in production. However, we are still improving the language. \n Here are some features currently under implementation:
\n
\n
Checked widget state types
\n
Support for nested attibutes in store queries
\n
Statistical queries such as count, sum, min, max
\n
Projection queries that only return selected attributes rather than full fledged instances
\n\n \n\n >;\n }\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Dialects\");\n }\n\n renderContent() {\n return <>\n
Prompto dialects
\n\n
Information technologists can have very different backgrounds. \n Some are very technical, with strong skills in OOP languages such as Java or C#. \n Some have grown their programming skills from scripting languages such as Python. \n Others have little or no coding experience, and work more on functional specifications, project\n management or testing. \n All these information technologists participate actively in the development. \n At Prompto, we believe they are all developers, and should have equal access to code.\n
\n\n
Syntax is a detail
\n\n
To facilitate the conversation between all breeds of developers, Prompto comes with not one \"language\"\n but\n three. \n Prompto calls these dialects, as they are not independant languages, but rather 3 syntactic variations\n of the same language concepts. \n Prompto dialects are a collaborative tool which helps technologists work together. \n They eliminate the barrier of having to learn a formal grammar only to read code. \n They make it very easy for any developer to adopt the Prompto platform, whatever his/her coding\n background.\n
\n\n
The Objy dialect aka \"O\"
\n\n
Objy uses a syntax that tries to follow as much as possible the syntax of OOP languages such as C++, Java\n or C#. \n Since Prompto introduces new concepts, the Objy syntax sometimes differs from these languages. \n But structuring elements are very similar: semi-colons to end statements, curly braces to group multiple\n statements, etc... \n Here is an example: \n
Monty uses a syntax that tries to follow as much as possible the syntax of the Python 3 language. \n Since Prompto introduces new concepts, the Monty syntax sometimes differs from the Python 3 syntax. \n But structuring elements are very similar: one statement per line, colon and indentation to group\n multiple\n statements, etc... \n Here is an example: \n
Engly is a syntax that mimics English as much as possible. \n The intent is that developers with little or no coding background should be able to read code without\n having to learn the formalism of other dialects. \n The structure is very similar to Monty. Additionaly, it removes parenthesis, and many keywords are\n replaced by plain English words. \n Here is an example: \n
\n
{String.raw`define main as method doing:\n print \"15 + 3.5\"\n print \"= 28.5\"`}
\n \n\n
Seamless translation between dialects
\n\n
Prompto tools provide seamless translation from one dialect to another. \n Practically, you simply need to select the dialect of your choice. \n This makes it very easy for any developer to view any code in his/her preferred dialect. \n It also makes it very easy for a developer to switch dialect in the future, since no rewriting is\n needed. \n You can experience this translation by exploring the examples in this documentation.\n
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Keywords\");\n }\n\n renderContent() {\n return <>\n
Keywords
\n\n
The following keywords are reserved by Prompto. They cannot be used for attributes, categories, methods, variables and so forth:
\n\n
\n abstract \n all \n always \n and \n any \n as \n asc \n ascending \n attr \n attribute \n attributes \n bindings \n break \n by \n case \n catch \n category \n class \n close \n contains \n def \n default \n define \n delete \n desc \n descending \n do \n doing \n each \n else \n enum \n enumerated \n except \n execute \n expecting \n extends \n fetch \n filtered \n finally \n flush \n for \n from \n getter \n has \n if \n in \n index \n invoke: \n is \n matching \n method \n methods \n modulo \n mutable \n native \n None \n not \n nothing \n Nothing \n null \n on \n one \n operator \n or \n order \n otherwise \n pass \n raise \n read \n receiving \n resource \n return \n returning \n rows \n self \n setter \n singleton \n sorted \n storable \n store \n super \n switch \n test \n then \n this \n throw \n to \n try \n verifying \n widget \n with \n when \n where \n while \n write\n
\n\n \n
The below lists of built-in names are indicative and not exhaustive. They may evolve as the Prompto framework expands.
\n\n
Built-in type names
\n\n
The following type names are reserved by Prompto. Their names cannot be used for attributes, categories, methods, variables and so forth:
\n
\n Any \n Blob \n Boolean \n Character \n Code \n Css \n Cursor \n Date \n DateTime \n Decimal \n Document \n Html \n Image \n Integer \n Iterator \n Method \n Period \n Text \n Time \n Type \n Uuid\n Version\n
\n\n
Built-in attribute names
\n\n
The following attribute names are reserved by Prompto. Their names cannot be used for attributes, categories, methods, variables and so forth:
\n
\n dbId \n description \n encoding \n id \n image \n name \n path \n text \n timeStamp \n login \n password \n email \n
\n\n\n
Built-in category names
\n\n
The following category names are reserved by Prompto. Their names cannot be used for attributes, categories, methods, variables and so forth:
;\n\n }\n\n}","import React from 'react';\nimport Topic from \"../../content/Topic\";\nimport PromptoPlayer from \"../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Comments\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Comments
\n\n
Prompto supports comments in the form of line comments. \n A line comment is a line of text starting by {String.raw`//`} in E and O dialects, or # in M\n dialect. \n Prompto code is ususally not stored in files, so a comment cannot be attached to a file location.\n Instead, a comment is always attached to the next non-comment line of code. \n In the below example, the line comment is attached to the attribute declaration.\n
\n \n\n \n
Prompto does not support inline comments {String.raw`/* ... */`},\n because it would be impossible to place them when translating code from one dialect to another. \n For the same reason, Prompto does not support end of line comments, such as: a = 2 {String.raw`// assign 2 to a`}. \n The O dialect ignores line breaks, while the E and M dialects don't, so they would dangle around when\n translated.\n
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../content/Topic\";\nimport PromptoPlayer from \"../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Annotations\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Annotations
\n\n
Prompto supports Annotations. \n An annotation is an identifier prefixed by @ optionally followed by parameters enclosed in parenthesis. \n Annotations are always attached to the next non-comment declaration. \n In the below example, the first annotation is attached to the widget declaration, the second one to a method.\n
\n \n\n \n
As of writing, Prompto only supports built-in annotations, which are used by the Prompto components. \n Support for user defined annotations is a desired feature, just not yet implemented.\n
\n\n
Built-in annotations
\n\n
\n
\n @Inline\n This annotation only applies to native methods and categories. It tells the transpiler to inline native code (rather than generate a method which would then invoke it).\n
\n
\n @Callback\n This annotation only applies to native methods. It tells the transpiler to preserve method naming. This is necessary when using Html engines such as React, which call methods by name.\n
\n
\n @Static\n This annotation only applies to native methods. It tells the transpiler to make the transpiled method static. This is necessary when using Html engines such as React, which require certain callbacks to be static.\n
\n
\n @PageWidgetOf(\"SomePage\")\n This annotation only applies to widgets. It lets prompto tell the browser to load SomePage.page when running the widget from the developer factory.\n
\n
\n @WidgetField(name=\"SomeName\", type=SomeType)\n This annotation only applies to widgets. Library widgets often come with specific fields unrelated to the information domain, which cannot be treated as attributes. \n The @WidgetField annotation tells prompto that the widget has a built-in field named SomeName of type SomeType. \n From there, it is possible to use the widget field in widget code. \n The built-in ReactWidget comes with 2 widget fields: name and props. See ReactWidget for examples.\n
\n
\n @WidgetProperties(a document)\n This annotation only applies to widgets. Widgets are initialized using properties, and it is convenient to be able to verify them. \n The @WidgetProperties annotation tells prompto which properties the widget supports and their type. \n From there, it is possible to verify the widget property in widget code. \n See ReactWidget for examples.\n
\n
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Identifiers\");\n }\n\n renderContent() {\n return <>\n
Identifiers
\n\n
Many Prompto objects are uniquely identified by a built-in or user defined name: attributes, categories,\n methods, variables and so forth.
\n\n
Type names
\n\n
Prompto supports both built-in types and user defined types. \n The name of a type must start with an uppercase letter, followed by 0 or more letter, digit or\n underscore. \n The formal definition is 'A'..'Z' ('a'..'z' | 'A'..'Z' | '0'..'9' | '_')*.\n
\n
\n
Text is a valid type name
\n
TEXT is not a valid type name (it's a symbol)
\n
text is not a valid type name
\n
\n \n\n
Attribute names
\n\n
Prompto supports attributes. \n The name of an attribute must start with a lowercase letter, followed by 0 or more letter, digit or\n underscore. \n The formal definition is 'a'..'z' ('a'..'z' | 'A'..'Z' | '0'..'9' | '_')*.\n
\n
\n
dateOfBirth is a valid attribute name
\n
DateOfBirth is not a valid attribute name
\n
\n \n\n
Variable names
\n\n
Prompto supports variables. \n The name of a variable must start with a lowercase letter, followed by 0 or more letter, digit or\n underscore. \n The formal definition is 'a'..'z' ('a'..'z' | 'A'..'Z' | '0'..'9' | '_')*.\n
\n
\n
someItem is a valid variable name
\n
SomeItem is not a valid variable name
\n
\n \n\n
Method names
\n\n
Prompto supports methods. \n The name of a variable must start with a letter, followed by 0 or more letter, digit or underscore. \n The formal definition is ('a'..'z' | 'A'..'Z')('a'..'z' | 'A'..'Z' | '0'..'9' | '_')*.\n
\n
\n
someMethod is a valid method name
\n
SomeMethod is a valid method name
\n
SOME_METHOD is not a valid method name
\n
\n \n\n
Symbol names
\n\n
Prompto supports enumerations of both built-in types and user defined types. \n The name of an enumerated value is called a symbol. It must start with an uppercase letter, followed by\n 0 or more uppercase letter, digit or underscore. \n The formal definition is 'A'..'Z' ('A'..'Z' | '0'..'9' | '_')*.\n
\n
\n
NORTH is a valid symbol
\n
North is not a valid symbol
\n
\n \n\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Text\");\n }\n\n renderContent(topicSelected) {\n return
\n
Text
\n\n
The Text type is a technical type used for values such as a name or a description, where the\n textual representation\n and the meaning are equivalent. \n All Text values use Unicode internally. \n A Text literal must be enclosed in double quotes: \n
\n
\"This is a text literal.\"
\n\n\n
If a Text literal must contain a double-quote, that double-quote must be escaped using the anti-slash '\\' character:
\n
\"This text literal contains two \\\"double quotes\\\".\"
\n\n
Consequently, if a Text literal must contain the anti-slash'\\' character, the '\\' character must be\n escaped using the '\\' character.
\n
\"This text literal contains one anti-slash: \\\\.\"
\n\n
Additionally, Text literals support the following special characters:
\n
{String.raw`\"\\t\" -> Tab\n\"\\b\" -> Back space\n\"\\n\" -> New line\n\"\\r\" -> Carriage return\n\"\\f\" -> Form feed\n\"\\'\" -> Single quote`}
\n\n
\n Finally, Text literals support Unicode characters in\n the form of UTF-16 hexadecimal characters:
\n
\"delta: \\u0394\" -> delta: δ
\n\n
\n Text attributes\n
\n
Text values have the following attributes:
\n
\n
count: returns an Integer equal to the number of characters\n \n
\n
\n\n\n
\n Text methods\n
\n
Text values have the following methods:
\n
\n
toLowerCase: returns a Text with all characters in lower case\n \n \n
\n
toUpperCase: returns a Text with all characters in upper case\n \n \n
\n
toCapitalized: returns a Text with the first letter of each word capitalized\n \n \n
\n
split: splits a Text into segments defined by a separator and return them as a Text list\n \n \n
\n
trim: returns a Text with leading and trailing white space trimmed\n \n \n
\n
replace: returns a Text with one occurence replaced\n \n \n
\n
replaceAll: returns a Text with all occurences replaced\n \n \n
\n
\n\n\n
;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Integer\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Integer
\n\n
The Integer type is a technical type used for integral numbers, using 8 bytes, thus ranging from -263 to 263-1. \n An Integer literal is simply a sequence of digits, such as 13465. \n Prompto also supports Integer literals using hexadecimal notation, such as 0xA3B2FE. \n Finally, Prompto supports 2 special Integers, MIN_INTEGER and MAX_INTEGER.\n
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Decimal\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Decimal
\n\n
The Decimal type is a technical type used for non integral numbers,\n using 8 bytes as specified by IEE 754. \n A Decimal literal is simply a sequence of digits, followed by a dot and another sequence of digits, such as 13465.02. \n Prompto also supports Decimal literals using scientific notation, such as 0.074e32. \n
\n
\n Please note that due to their internal binary representation, not all Decimal values can be accurately represented. \n For example, the internal representation for 1.3 is actually 1.2999999999999998. \n See this detailed explanation with more examples.\n
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Boolean\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Boolean
\n\n
The Boolean type is a technical type used exclusively for the values true and false. \n A Boolean literal is simply one of the words true or false. \n Alternately, Prompto also supports the words True and False.\n
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Character\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Character
\n\n
The Character type is a technical type used for easy manipulation of single characters. \n Like Text values, all Character values use Unicode internally. \n Character literals support the same escape characters as Text literals. \n A Character literal must be enclosed in single quotes.
\n
'c' -> the 'c' character
\n \n\n
\n Character attributes\n
\n
Character values have the following attributes:
\n
\n
codePoint: returns an Integer equal to the character 16-bit unicode code point
\n \n
\n\n\n \n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Date\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Date
\n\n
The Date type is a technical type used to represent a day. It does not support time zones. \n A Date literal is a sequence of 3 integers, separated by a hyphen '-',\n representing the year, the month and the day of the month. \n A Date literal conforms to the ISO 8601 format. \n A Date literal must be enclosed in single quotes.\n
\n
'1981-05-12' -> 12th of May of year 1981
\n\n \n
\n Date attributes\n
\n
Date values have the following attributes:
\n
\n
year: returns an Integer equal to the date's year
\n
month: returns an Integer equal to the date's month (January is 1, December is 12).
\n
dayOfMonth: returns an Integer equal to the date's month day (1 to 31)
\n
dayOfYear: returns an Integer equal to the date's year
\n \n
\n \n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Time\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Time
\n\n
The Time type is a technical type used for to represent a time of day. It does not support time zones. \n A Time literal is a sequence of 2 to 4 integers, separated by a semi colon ':' or a dot for the last one,\n representing the hour of day, the minute, the optional second and the optional millisecond. \n A Time literal conforms to the ISO 8601 format. \n A Time literal must be enclosed in single quotes.
\n
{String.raw`'13:07' -> 13 hours and 7 minutes\n'13:07:02.013' -> 13 hours, 7 minutes, 2 seconds and 13 milliseconds`}
\n \n\n
\n Time attributes\n
\n
Time values have the following attributes:
\n
\n
hour: returns an Integer equal to the time's hour (0 to 23)
\n
minute: returns an Integer equal to the time's minute (0 to 59).
\n
second: returns an Integer equal to the time's second (0 to 59)
\n
millisecond: returns an Integer equal to the time's millisecond (0 to 999)
\n \n
\n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"DateTime\");\n }\n\n renderContent(topicSelected) {\n return <>\n
DateTime
\n\n
The DateTime type is a technical type used to represent an instant, with time zone support. \n A DateTime literal is formed by a Date literal, followed by a 'T', followed by a Time literal,\n optionally followed by a time zone offset. \n A DateTime literal conforms to the ISO 8601 format. \n A DateTime literal must be enclosed in single quotes. \n If a time zone offset is not specified, the literal is interpreted in the time zone of the operating system. \n
\n
{String.raw`'1981-05-12T13:02:11.002' -> 13 hours, 2 minutes, 11 seconds and 2 milliseconds on the 12th of May of year 1981\n'1981-05-12T13:02:11.002+0200' -> same date time as above, in the GMT + 02:00 time zone`}
\n\n
\n DateTime attributes\n
\n
DateTime values have the following attributes:
\n
\n
year: returns an Integer equal to the date time's year
\n
month: returns an Integer equal to the date time's month (January is 1, December is 12).
\n
dayOfMonth: returns an Integer equal to the date time's month day (1 to 31)
\n
dayOfYear: returns an Integer equal to the date time's year
\n
hour: returns an Integer equal to the date time's hour (0 to 23)
\n
minute: returns an Integer equal to the date time's minute (0 to 59).
\n
second: returns an Integer equal to the date time's second (0 to 59)
\n
millisecond: returns an Integer equal to the date time's millisecond (0 to 999)
\n
tzOffset: returns an Integer equal to the date time's time zone offset in minutes
\n
tzName: returns an Integer equal to the date time's time zone offset in minutes
\n
Please note that due to limitations of Python and JavaScript, tzOffset and tzName are not currently supported on these platforms.
\n \n
\n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Period\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Period
\n\n
The Period type is a technical type used to represent a period of time, or a duration. \n A Period literal is formed by a 'P' followed by a sequence of integral quantities preceded by their unit, see examples. \n Day level units and time level units are separated by a 'T', as in DateTime literals. \n A Period literal conforms to the ISO 8601 format. \n A Period literal must be enclosed in single quotes.
\n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Uuid\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Uuid
\n\n
The Uuid type is a technical type often used in IT systems to provide unique identifiers. \n A Uuid generator is a system which using specific hardware unique data such as MAC address, and current instant,\n is able to generate a globally Universal Unique IDentifier. \n A Uuid literal is a sequence of characters, digits and hyphens which conform to the RFC 4122 specification. \n A Uuid literal must be enclosed in single quotes.
\n
'123e4567-e89b-12d3-a456-426655440000' -> a valid UUID
\n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Blob\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Blob
\n\n
The Blob (Binary Large OBject) type is a technical type used to hold an arbitray list of raw bytes. \n A Blob has a mime type, which is useful to describe the type of the binary data, notably over the Internet. \n There is no Blob literal, a Blob can only be read from an external resource, and written to it. \n By design, Prompto has no byte manipulation capabilities.\n
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Image\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Image
\n\n
The Image type is a specialized Blob type used to hold displayable binary data, such as a JPEG image. \n An Image has a mime type, which is useful to describe the type of the binary data, notably over the Internet. \n There is no Image literal, an Image can only be read from an external resource, and written to it. \n
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Version\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Version
\n\n
The Version type is a technical type often used in IT systems to provide software version. \n A regular Version literal optionally starts with a 'v', and comprises a major number comprised between 0 and 250, a minor number comprised between 0 and 250,\n an optional fix number comprised between 0 and 250, and an optional qualifier: 'alpha', 'beta' or 'candidate' ('release' is implicit). \n Prompto also supports 2 special version literals: 'development' and 'latest'. \n A Version literal must be enclosed in single quotes.
major: returns an Integer equal to the major number\n \n
\n
minor: returns an Integer equal to the minor number\n \n
\n
fix: returns an Integer equal to the fix number\n \n
\n
qualifier: returns a Text equal to the qualifier\n \n
\n
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport TextType from \"./TextType\";\nimport IntegerType from \"./IntegerType\";\nimport DecimalType from \"./DecimalType\";\nimport BooleanType from \"./BooleanType\";\nimport CharacterType from \"./CharacterType\";\nimport DateType from \"./DateType\";\nimport TimeType from \"./TimeType\";\nimport DateTimeType from \"./DateTimeType\";\nimport PeriodType from \"./PeriodType\";\nimport UuidType from \"./UuidType\";\nimport BlobType from \"./BlobType\";\nimport ImageType from \"./ImageType\";\nimport VersionType from \"./VersionType\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Atomic types\", [ TextType, IntegerType, DecimalType, BooleanType, CharacterType,\n DateType, TimeType, DateTimeType, PeriodType,\n UuidType, VersionType, BlobType, ImageType ]);\n }\n\n renderContent(topicSelected) {\n return
\n
Atomic data types
\n\n
Atomic data types are technical types which can hold a single 'atomic' data value: text, number, date and so forth. \n All atomic data types are defined by Prompto, there is no way to define custom atomic types in Prompto. \n Atomic data types can be stored.\n
\n
Prompto defines the following atomic types:
\n
\n
Text
\n
Integer
\n
Decimal
\n
Boolean
\n
Date
\n
Time
\n
DateTime
\n
Period
\n
Uuid
\n
Version
\n
Blob
\n
Image
\n
\n
;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"List\");\n }\n\n renderContent(topicSelected) {\n return <>\n
List
\n\n
The List type is a technical type used to keep together 0 or more items of the same type. \n The items themselves can be of any type. \n A List type is declared by adding square brackets '[]' after the item type.\n
\n
Text[] -> the type Text list
\n
A List literal must be enclosed in square brackets '[' and ']', the items being separated by a comma ','.
\n
{String.raw`[12, 15, -3] -> a List of 3 Integers\n[\"Paris\", \"London\", \"Singapore\"] -> a List of 3 Texts`}
\n \n
Items in a List can be accessed individually using their position. \n Positions start at 1 and end at the list length.
\n
{String.raw`a = [12, 15, -3] -> assign a List of 3 Integers to variable 'a'\na[1] -> get item at position 1 in List referenced by variable 'a' i.e. the Integer 12`}
\n \n\n
\n List attributes\n
\n
List values have the following attributes:
\n
\n
count: returns an Integer equal to the number of items in the list
\n \n
\n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Set\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Set
\n\n
The Set type is a technical type used to keep together 0 or more distinct items of the same\n type. \n The items themselves can be of any type. \n A Set type is declared by adding angle brackets '<>' after the item type.\n
\n
{String.raw`Text<> -> the type Text set`}
\n
A Set literal must be enclosed in angle brackets '<' and '>', the items being separated by a comma ','.
\n
{String.raw`<12, 15, -3> -> a set of 3 Integers\n<\"Paris\", \"London\", \"Singapore\"> -> a Set of 3 Texts`}
\n
Items in a Set cannot be accessed individually, because the position in the Set may change internally\n when ensuring uniqueness. \n Set items are accessed using iterators or predicates.
\n
{String.raw`s = <12, 15, -3> -> assign a Set of 3 Integers to variable 's'\nfor each i in s -> iterate over items in Set referenced by variable 's'\ns contains 12 -> return true if Set referenced by variable 's' contains the Integer 12`}
\n \n\n
\n Set attributes\n
\n
Set values have the following attributes:
\n
\n
count: returns an Integer equal to the number of items in the set
\n \n
\n \n\n >\n ;\n }\n\n }\n\n export default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Range\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Range
\n\n
The Range type is a technical type used to create sequences of 1 or more items of the same discrete type. \n The items themselves can only be of type Character, Integer, Date or Time. \n A Range type is declared by adding 2 dots enclosed in square brackets '[..]' after the item type.
\n
Integer[..] -> the type Integer range
\n
A Range literal must be enclosed in square brackets '[' and ']', the start and end value being separated\n by 2 dots '..'.
\n
{String.raw`[1..17] -> all Integers ranging from 1 to 17 included\n['c'..'k'] -> all Characters ranging from 'c' to 'k' included (using their Unicode value)\n['2012-01-01'..'2014-04-01'] -> all Dates ranging from '2012-01-01' to '2014-04-01'\n['20:01:01'..'23:02:02'] -> all Times ranging from '20:01:01' to '23:02:02', with a 1 second increment`}
\n
\n Items in a Range can be accessed individually using their position. \n Positions start at 1 and end at the Range length.
\n
{String.raw`r = [2..17] -> assign a Range of Integers to variable 'r'\nr[4] -> get item at position 4 in Range referenced by variable 'r' i.e. the Integer 5`}
\n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Dictionary\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Dictionary
\n\n
The Dictionary type is a technical type used to keep together 0 or more items of the same type and access them using a Text key. \n The items themselves can be of any type. \n A Dictionary type is declared by adding colon surrounded by angle brackets '<:>' after the item type.
\n
{String.raw`Text<:> -> the type Text dictionary`}
\n
A Dictionary literal must be enclosed in angle brackets '<' and '>', the items being separated by a comma ',', the key and value being separated by a semi colon ':'.
\n
{String.raw`<:> -> an empty Dictionary\n<\"Paris\": \"France\", \"London\": \"England\", \"Berlin\": \"Germany\"> -> a Dictionary of 3 keys and Text values`}
\n
Items in a Dictionary can be accessed individually using their key.
\n
{String.raw`d = <\"Paris\": \"France\", \"London\": \"England\"> -> assign a Dictionary of 2 Texts to variable 'd'\nd[\"Paris\"] -> get item with key \"Paris\" in Dictionary referenced by variable 'd' i.e. \"France\"`}
\n\n\n
\n Dictionary attributes\n
\n
Dictionary values have the following attributes:
\n
\n
count: returns an Integer equal to the number of key/value pairs in the dictionary
\n
keys: returns a Set of Text values containing all the keys in the dictionary
\n
values: returns a List of values containing all the values in the dictionary.\n The exact type of the List is determined by the exact type of the dictionary
\n \n
\n \n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport ListType from \"./ListType\";\nimport SetType from \"./SetType\";\nimport RangeType from \"./RangeType\";\nimport DictionaryType from \"./DictionaryType\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Collection types\", [ ListType, SetType, RangeType, DictionaryType ]);\n }\n\n renderContent(topicSelected) {\n return <>\n
Collection types
\n\n
Collection types are technical data types which can hold multiple values, typically of the same value type. \n Amongst these, only List and Set can be stored.\n
\n\n
Prompto defines the following collection types:
\n
\n
List
\n
Set
\n
Range
\n
Dictionary
\n
\n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Document\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Document
\n\n
The Document type is a technical type used to manipulate arbitrary data structures with loose typing. \n A Document has items which can be of any type, atomic, collection or Document. \n A Document is useful to read data from messages, files or the Internet, and convert it to typed data. \n
\n
Creating a Document
\n
Creating a Document is done simply by using a Document literal, enclosed in curly braces '{' and '}', the items being separated by a comma ',', the key and value being separated by a semi colon ':'.
\n
{String.raw`{} -> an empty Document\n{\"Paris\": \"France\", \"John\": 20000} -> a Document of 2 keys and values`}
\n
Document keys starting with a lowercase letter and not comprising special characters do not need to be enclosed in double-quotes.
\n \n \n
Alternately, a Document can be created using the Document keyword and assigning it to a variable. Once the document is created, it can be populated simply by assigning values to members. Both member definition and\n member population occur at the same time i.e. a document has no predefined members.\n
\n \n\n
Accessing Document members
\n
Items in a Document can be accessed individually using their key.
\n
{String.raw`d = {\"Paris\": \"France\", \"London\": \"England\"} -> assign a Document of 2 Texts to variable 'd'\nd[\"Paris\"] -> get item with key \"Paris\" in Document referenced by variable 'd' i.e. \"France\"`}
\n\n
Populating deep members
\n
A deep member is a member that is not directly accessible from the root of a Document. \n Prompto gracefully creates missing members on the fly, making it very easy to populate them:\n
\n \n\n
Populating list members
\n
Document members can also be lists:
\n \n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Attribute\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Attribute
\n\n
The Attribute type is a semantic type. \n Prompto encourages technologists to use semantic types rather than technical ones. \n A semantic type is a type defined by meaning rather than structure. \n For example dateOfBirth is a semantic type, while Date is a technical\n type. \n In Prompto, semantic types are defined through attribute definitions. \n An attribute is defined by simply combining a name with a technical or category type. \n
\n \n\n
Constraints
\n\n
Additionally, attributes may also have to fit within value domains. \n These can be defined using lexical patterns, lists of values or computable expressions. \n Computable expressions can refer to the underlying value using the keyword value. \n
\n \n\n
Storage
\n\n
Finally, attributes are used to define the data store schema. \n To achieve this, storable attribute definitions must be preceded with the storable keyword. \n If the attribute is to be searchable, it must also be indexed. \n For all technical types except Text, this is achieved by simply adding with index to the\n attribute definition. \n
\n \n\n
Indexing Text
\n\n
Indexing Text attributes requires a bit more attention. \n Text attributes may be used as unique identifiers. Examples of such are a product reference or social\n security number. \n Such Text attributes should be indexed using key indexing, which is case sensitive. \n Most Text attributes are better indexed insensitively of case, and would happily benefit from a phonetic\n search. \n Such Text attributes should be indexed using value indexing, which is not case\n sensitive. \n (depending on the data store implementation, phonetic search may or not be available). \n Finally, some Text attributes are actually sentences rather than 'atomic' values. \n For these, it is often preferable to use words indexing. \n Prompto lets you combine the 3 index types. It is rare however to simultaneously need more than 1 of\n them. \n
\n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Enumeration\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Enumerations
\n\n
An enumeration is a list of names for constant values of a particular type. \n Enumerations are practical to refer to values using symbols, rather than provide the same value again\n and again in your code. \n Prompto supports enumerations of both built-in and user defined types. \n This section describes enumerations of built-in types. \n The below is an example:\n
\n
\n \n
\n \n
Enumerated symbols are global definitions. You cannot redefine the above\n name NORTH elsewhere. \n Enumeration symbols must be composed of uppercase letters, digits and '_' only. The first character\n cannot be a digit. \n This makes it easy to recognize enumerated symbols at first glance. \n
\n
Once an enumerated symbol is defined, it can be used anywhere in place of the value itself.
\n
\n \n
\n\n
\n Enumeration attributes\n
\n
Each enumerated symbol has the following attributes:
\n
\n
name: returns the name of the enumerated symbol as a Text value
\n
value: returns the value represented by the enumerated symbol.\n The exact type of the value is determined by the exact type of the enumeration\n
\n
\n\n
The enumeration itself has the following attributes:
\n
\n
symbols: returns a List of the symbols in the enumeration
\n \n
\n \n\n
Enumerations of user defined types
\n
Prompto supports Enumerations of user defined types. See Categories for details.
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Any\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Any
\n\n
The Any type is a general technical type to represent any type of data. \n This type is useful internally for describing value types when the actual type is not known at compile time. \n It is also useful to hold opaque native values. \n
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Method\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Method
\n\n
The Method type is a technical type used to hold Prompto methods as values. \n Method types are declared implicitly when declaring methods. \n Prompto supports assigning methods to variables and passing them as parameters.
\n
m = Method: myMethod -> assign the method 'myMethod' to variable 'm'
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Type\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Type
\n\n
The Type type is a technical type used to hold Prompto types as values. \n Prompto supports assigning types to variables and passing them as parameters.
\n This is useful when defining widget property types, for example:\n
@WidgetProperties({'{'} componentClass: Type<ReactWidget> {'}'}) -> assigns the type 'ReactWidget' to the 'componentClass' widget property
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Iterator\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Iterator
\n\n
The Iterator type is a technical type produced by Prompto when transforming a collection inline.
\n
x + 1 for each x in [1..5] -> returns an Iterator which will produce an item on each iteration
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Cursor\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Cursor
\n\n
The Cursor type is a technical type used to navigate through data returned by the data store.
\n
c = fetch all -> returns a Cursor which will produce an item on each iteration
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Code\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Code
\n\n
The Code type is a technical type used to represent Prompto code as values. \n Prompto supports passing code snippets as parameters, so this type is useful for passing code to methods.
\n
c = Code: a + b -> assign the Prompto code 'a + b' to variable 'c'
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Void\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Void
\n\n
The Void type is a special technical type to represent the absence of type. \n This type is useful internally for describing the return type of methods which do not return any value. \n
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Css\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Css
\n\n
CSS stands for Cascading Style Sheet.\n CSS is a Web standard defined here.\n The Css type is a technical type used for CSS expressions. \n A CSS literal is a sequence of 1 or more CSS entries, separated by semi-colons.
\n A CSS entry comprises exactly:\n
\n
a property (which must be a valid CSS property)
\n
the : separator
\n
a value, which can be either of:\n
\n
a literal (which must be a valid CSS value for the property)
\n
a Prompto expression enclosed in curly braces (which must provide a valid CSS value for the property)
\n
a combination of the above
\n
\n
\n
the ; terminator
\n
\n
A Css literal must be enclosed in curly brackets.
\n
{String.raw`{ width: 80px; display: none; } -> a simple CSS literal\n{ display: { some_value }; } -> a CSS literal, where the value for the display property is an expression evaluated at runtime\n{ width: { some_value }px; } -> a CSS literal, where the value for the width property is determined at runtime`}
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Html\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Html
\n
The Html type is a technical type used for Html expressions.
\n
Prompto supports JSX-like syntax, where html tags, Prompto code and widget tags can be combined to render html dynamically.
\n
Here is a simple example:
\n \n \n
Prompto does not let you generate Html per se. \n You cannot programmatically produce a {String.raw``} tag. \n Rather you call a method such as the above one, which returns the required Html.
\n
You also cannot store Html. Html is for display only, through widgets.
\n\n
Structure
\n
Html code must comprise one and one only root tag, which may comprise children. \n Prompto does not yet support fragments, this is a desired feature, just not implemented yet.\n
\n
Each tag can have attributes. An attribute can only appear once per tag. \n Each attribute must have a value, which can be either a Text, or a Prompto expression.\n
\n\n\n
Rendering plain HTML
\n
Although the HTML standard supports both lowercase and uppercase tags, Prompto requires that plain HTML tags be lowercase. \n For these, Prompto performs no processing of the tag itself. The Html value will be transpiled as is.
\n \n \n\n
Rendering content dynamically
\n
Prompto supports setting content at runtime using a Prompto expression enclosed in curly braces.
\n \n \n\n\n
Rendering attributes dynamically
\n
Prompto supports setting attribute values at runtime using a Prompto expression enclosed in curly braces (which must provide a valid value for the attribute).
\n \n \n\n
Rendering tags dynamically
\n
Prompto supports rendering tags at runtime using a Prompto expression enclosed in curly braces (which must provide valid Html content).
\n
In the below example, we build a list of <div> tags dynamically from a list:
\n \n
(note that the list itself is enclosed in a tag, following the requirement of one and one only root tag)
\n \n\n
Rendering custom tags a.k.a. widgets
\n
Prompto supports rendering custom tags a.k.a. widgets. Prompto requires that widget tags start with an uppercase letter.
\n
Widgets are defined in Prompto code, see widgets section.
\n
In the below example, we render a widget named MyWidget.
\n \n \n\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"DbId\");\n }\n\n renderContent(topicSelected) {\n return <>\n
DbId
\n\n
The DbId type is a general technical type to represent the type of data used by the data store for uniquely identifying records. \n Each data store may internally use a different type of data: Integer, UUID or Text. \n The DbId type wraps the internal type such that corresponding values can be copied, returned or passed as parameters without knowing the actual type. \n
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Worker\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Worker
\n\n
The Worker type is a technical type used to start and control additional threads of execution. \n See the Workers section for more details.\n
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport AnyType from \"./AnyType\";\nimport MethodType from \"./MethodType\";\nimport TypeType from \"./TypeType\";\nimport IteratorType from \"./IteratorType\";\nimport CursorType from \"./CursorType\";\nimport CodeType from \"./CodeType\";\nimport VoidType from \"./VoidType\";\nimport Topic from \"../../../content/Topic\";\nimport CssType from \"./CssType\";\nimport HtmlType from \"./HtmlType\";\nimport DbIdType from \"./DbIdType\";\nimport WorkerType from \"./WorkerType\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Special types\", [ VoidType, DbIdType, AnyType, CssType, HtmlType, IteratorType, CursorType, TypeType, MethodType, CodeType, WorkerType ]);\n }\n\n renderContent(topicSelected) {\n return <>\n
Special types
\n
Special types are technical types which do not hold domain information and only live during program execution.
\n\n
Prompto defines the following special types:
\n
\n
Void
\n
DbId
\n
Any
\n
Css
\n
Html
\n
Iterator
\n
Cursor
\n
Type
\n
Method
\n
Code
\n
Worker
\n
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport AtomicTypes from \"./AtomicTypes\";\nimport CollectionTypes from \"./CollectionTypes\";\nimport DocumentType from \"./DocumentType\";\nimport AttributeType from \"./AttributeType\";\nimport EnumerationType from \"./EnumerationType\";\nimport SpecialTypes from \"./SpecialTypes\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Types\", [ AtomicTypes, CollectionTypes, DocumentType, AttributeType, EnumerationType, SpecialTypes ]);\n }\n\n renderContent() {\n return <>\n
Types
\n\n
This section describes types in the Prompto language.
\n\n
What is a type?
\n\n
Programming languages are used to manipulate all sorts of values: text, number, time, image... \n Values can be provided using inline literals, like 123 or \"John\". \n They can be calculated from existing values, like 123 + 456. \n They can also be read from a database, from files, from the internet and so forth. \n Values need to be brought into Prompto in order to be manipulated. \n However, not all manipulations make sense. As an example, it is valid to\n multiply 123 with 456\n because both are numbers. It generally does not make sense however to\n multiply Christmas with Easter. \n The purpose of a type is to determine which operations can be performed on a value,\n and how these operations are performed. \n
\n\n
Static typing vs dynamic typing
\n
Some languages like Python or JavaScript support the following code:
\n
{String.raw`a = 123\na = \"John\"`}
\n
\n In the above code, an integer value and a text value are successively assigned to a variable\n called a. \n This means that the set of operations which are valid for a varies during execution. This is\n called dynamic typing. \n Languages like C++, Java or C# require that the set of operations be known at compile time. This is\n called static typing.\n
\n
Prompto supports both static typing and dynamic typing.\n At Prompto, we believe that static typing is key to performance and robustness of core code which is\n intensively executed of often reused.\n However, we also believe that as code gets closer to the edges of an application, notably for\n input and output, flexibility becomes more important.\n
\n
Dynamic typing in Prompto
\n
Prompto supports dynamic typing of Document members.
\n
Static typing in Prompto
\n
All other Prompto objects are statically typed.
\n\n
Type inference
\n
While Prompto is mostly statically typed, it implements type inference, where the type of an\n object is inferred from the context, rather than defined through declarations.\n This lets developers focus on meaning rather than typing. It is however mandatory to declare the type of method arguments.
\n\n
Technical types vs Semantic types
\n\n
Like all programming languages, Prompto comes with built-in types for commonly used types of values. \n Prompto calls these technical types, because they are defined by their technical structure and\n behaviour.
\n\n
Atomic types
\n
Atomic types are technical types which can only hold a single 'atomic' value: Text, Integer, decimal,\n Date and so forth.
\n\n
Collection types
\n
Collection types are technical types which can hold multiple 'atomic' value: List, Set, Tuple and\n Dictionary.
\n\n
Semantic types i.e. Attributes
\n
Prompto introduces Attributes,\n which associate a name with a technical or composed type. \n This association lets the name carry both meaning and technical structure.\n
\n\n
Composed types
\n
Composed types are user defined types which combine multiple Attributes. In Prompto, these types\n are called Categories.
\n\n\n
Special types
\n
Special types are technical types which do not hold meaningful values but rather serve program execution:\n Iterator, Cursor, Method and so forth.
\n \n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Mutability\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Mutability
\n\n
Programs are used to alter data. They do this either by introducing new data, transforming existing data or deleting it. \n Naturally, many programming languages let developers alter data: C, C++, Java, C#, Python, JavaScript...
\n As an example, a JavaScript object can be modified as follows:
\n
{String.raw`var person = { name : \"John\", gender : \"Male\", profession: \"Engineer\" }\n// now modify the person\nperson.profession = \"Manager\";`}
\n
The above has the benefit of simplicity.
\n
However, as programs grow and become more complex,\n notably when multiple execution threads run in parallel, it can become very difficult to control\n what happens when data used by the program changes.
\n
This has led the industry to provide a different breed of programming languages, known as functional languages. \n Examples of such languages are Haskell, Erlang, F#, Clojure, and to a certain extent Scala. \n Their common characteristic is that instead of modifying existing data, they rather produce new data\n from the existing data and the required alterations.
\n As an example, the above fragment could be written functionally as follows:\n
\n
{String.raw`var person = { name : \"John\", gender : \"Male\", profession: \"Engineer\" };\n// create a function to produce a modified person\nfunction modifiedPersonWithAttribute(person, atttribute, newValue) {\n person = Object.create(person);\n person[atttribute] = newValue;\n return person;\n}\n// call that function\nperson = modifiedPersonWithAttribute(person, \"profession\", \"Manager\");`}
\n
Note that the original object is not modified, instead a new object is created,\n and assigned to the person variable. By doing so, if any other variable refers to the original object,\n its behavior will remain predictable. \n See Functional_programming for more background on functional programming.\n
\n
At Prompto, we believe in functional programming, however we also notice a few things:
\n
\n
It is a bit awkward for a language to not alter data when the purpose of every program is actually to alter data\n (if you accept to consider that creating new data is altering the set of existing data).\n This contradiction sometimes generates a lot of complexity.
\n
While it is generally wrong to share mutable data across parts of a program, there are places where it is 100% safe,\n much simpler and much faster to mutate data, such as input/output and initialization.
\n
\n
From there, we decided it would be better, rather than force developers into a stiff model, to instead let them decide when to use mutable data.
\n\n
Mutable variables vs mutable values
\n\n
In Prompto, all variables are mutable. It is perfectly legal to write the following 2 assignments:
\n
{String.raw`a = 1.347\na = 2.013`}
\n
In this example, the value 1.347 remains unchanged, but a now refers to another value.
\n
Prompto values on the other hand are by default immutable.
\n
For example, you cannot change the value of a default non mutable list,\n instead you must produce a new list composed from the old list and additional data, as follows:\n
\n
{String.raw`list = [1, 2, 3]\nlist = list + [4, 5]`}
\n
Now let's imagine you need to change the second item of the above list from 2 to 5. Using an immutable list,\n you would have to write the following:
\n
list = list[1:1] + [5] + list[3:3]
\n
This is tedious to write, hard to read, and slow to execute. If list only exists within a small and well controlled scope,\n it is much simpler and faster to use a mutable list instead, as follows:
Please note that the above code would be illegal if the mutable keyword was omitted.
\n
Also note that only collection and category values can be marked mutable.
\n
You cannot make an immutable value mutable. \n You can however create a mutable value from an immutable one. \n For collection values this is simply achieved by adding the immutable collection value to the mutable one:
Please note that changing the name attribute of the mutablePerson does not affect the name attribute of the immutablePerson.
\n\n
Mutability guardians
\n\n
Controlling mutability can rapidly become complex when values are passed as parameters to methods, or when returning them from method bodies. \n Prompto lets developers declare mutable parameters, using the following syntax:
\n
define doStuff as method receiving mutable Text[] list and Integer[] someData
\n
In this example, the list parameter is mutable, while the someData parameter is not. \n Prompto ensures that only mutable values are passed as mutable parameters, hence preventing methods from modifying data without notice.
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../player/PromptoPlayer\";\nimport Topic from \"../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Testing\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Testing
\n\n
Prompto promotes Test Driven Development (TDD) and automated testing.\n TDD is a development\n approach\n where you write tests before writing code. There are numerous benefits to it:
\n
\n
you gain a better understanding of the requirement before you start writing the code
\n
you build a large number of tests which cover most if not all use cases
\n
\n\n
To encourage TDD, Prompto has a built-in testing framework, based on special methods called test\n methods.
\n
Here is an example:
\n \n
Test methods make it very easy to write tests before code, and even run them using the interpreter. The\n test will obviously fail until\n the correct code is implemented, which ensures that writing code actually does something: fix the\n test!
\n \n\n\n
Test method structure
\n
The structure of a test method is the following:
\n
\n
define <\"test name\"> as test method doing:
\n
Prompto code being tested
\n
and verifying:
\n
Prompto verification code
\n
\n
where \"test name\" is a free text literal (the only restriction being that the name must be\n unique),\n and Prompto verification code is a list of one or more predicates i.e. boolean expressions.\n
\n
Thanks to this structure, Prompto tests can check multiple predicates even if not all of them succeed, as\n in the below example:
\n \n \n\n
Testing errors
\n
Alternately, test methods can be used to check correct error handling. Here is an example:
\n \n \n\n
Testing stored data
\n
It is generally a bad idea to test against a permanent data store, because it means that the test success\n relies on the state\n of a data store which cannot be controlled by the test itself. \n To facilitate testing with stored data, Prompto creates a fresh memory store\n before the test runs (the store is disposed immediately after execution of the test).
\n
A reliable test involving stored data might look like the following:
\n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Declaring\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Declaring methods
\n
A method is identified by its prototype, defined by its name and its accepted arguments.
\n
A method is defined by declaring its prototype and optional return value, followed by the method statements.
\n
The minimal prototype has the following form:
\n
\n
In E dialect: define methodName as method doing:
\n
In O dialect: methodName() {}
\n
In M dialect: def methodName():
\n
\n\n
Method names
\n
A method name can be any valid identifier i.e. a word starting with a letter and followed by any number of letters or digits.
\n\n
Method return types
\n
A Prompto method can return any number of values.
\n
If no value is returned, the return type is known as Void type.
\n
If a value is returned, the return type can be specified. When not specified, it is inferred by Prompto.
\n
Specifying the return type is done as follows:
\n
\n
In E dialect: define methodName as method returning Type doing:
\n
In O dialect: Type method methodName() {}
\n
In M dialect: def methodName() -> Type:
\n
\n
where Type is the name of an existing type.
\n
If more than one value is returned, the return type is Tuple. This can be convenient for quick development\n but should not be used for large scale applications, because Prompto does not infer the type of Tuple elements.
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Calling\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Calling methods
\n
Calling methods is done simply by using the method name optionally followed by its arguments name and\n value pairs.
\n \n \n
Thanks to naming, arguments can be provided in any sequence, which makes it clear how the arguments are used.
\n \n \n
Naming the arguments is mandatory in Prompto. However, when a method accepts only 1 argument, the\n argument name can be omitted:
\n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Arguments\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Method arguments
\n\n
A Prompto method can accept 0 or more arguments.
\n
Arguments must be declared (there is no implicit argument such as arguments in JavaScript).
\n
When mutiple arguments are declared, they must be separated by commas. In E dialect only, the last comma is replaced by the and keyword.
\n
Arguments are typed, in one of the following ways:
\n
\n
\n Attribute argument, with the form name, where name is an existing Attribute name.\n \n
\n \n\n
\n Typed argument, with the form Type x, where type is an existing Type name\n and x can be any valid variable identifier.\n \n
\n \n\n
\n Attribute member argument, with the form any x with attribute name, where x can be any valid variable\n identifier and name is an existing Attribute name. This form accepts more than one attribute.\n \n
\n \n\n
\n Extended member argument, with the form Type x with attribute name,\n where type is an existing category name, x can be any valid variable\n identifier and name is an existing Attribute name. This form accepts more than one attribute.\n \n
\n
\n \n\n
Mixing argument types
\n
When a method expects mutiple arguments, argument types can be mixed as required.
\n
\n \n
\n \n\n
Default argument values
\n
Prompto supports default argument values, which remove the need to always pass all arguments to a method.
\n
Default argument values must be constant values, i.e. they cannot vary during program execution. Good candidates are literals, null, and enumerated values.
\n
\n \n
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Overloading\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Overloading methods
\n\n
Prompto supports method overloading, where 2 methods have the same name but different parameters.
\n
When a method is overloaded, Prompto selects the most appropriate one based on the best match of\n the proposed parameters with respect to the required arguments. This matching is performed using the sequence of the parameters\n in the method call.
\n
In the below example, the 2 methods have the same name, but a different number of arguments:
\n \n \n\n
Method overloading also works with different argument types.
\n
Each overloaded method provides a behavior specific to its argument types.
\n
When a method is overloaded, Prompto selects the most appropriate one at runtime i.e. the one for\n which the actual parameters best match the required method arguments,\n based on the sequence of the method call. This is different from many languages such as Java, C# or C++,\n where the resolution is decided at compile time.
\n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Abstract\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Abstract methods
\n
Prompto supports abstract methods, a special type of method, which must be overloaded.
\n
Abstract methods are resolved at runtime based on the actual type of the value.
\n
Abstract methods are well suited when no actual behaviour can be determined for an argument type (such as in the below Shape).
\n
In the below example, we do not know how to print a shape, only how to print specific shape types.
\n
In order to print a list of shapes without knowing their type, we use an abstract method.
\n \n \n\n
Abstract methods as arguments
\n
Abstract methods can also be used as arguments for other methods:
\n \n
In the above example, we show how to pass both a value: Hello and a method: displayScreen to another method: someMethod.
\n
The method: someMethod then invokes the method received as an argument, using the value also received as an argument.
\n
The method caller is responsible for providing a non abstract method compatible with the argument's method type.
\n
Please note that in the E dialect only, the Method: keyword is required to let Prompto decide whether to pass displayScreen\n directly as an argument, or to invoke it and pass the result. This is not required in O and M dialects, where method invocation requires parenthesis.
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Declaring from \"./Declaring\";\nimport Calling from \"./Calling\";\nimport Arguments from \"./Arguments\";\nimport Overloading from \"./Overloading\";\nimport Abstract from \"./Abstract\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Methods\", [ Declaring, Calling, Arguments, Overloading, Abstract ]);\n }\n\n renderContent(topicSelected) {\n return <>\n
Methods
\n\n
Prompto supports both global methods and category methods.
\n
In this section, we describe global methods only, category methods are described in the Categories section.
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Assignment\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Assignment statements
\n\n
An assignment is a statement which assigns the value of an expression to a value holder. \n An assignment has the form holder = exp where exp is an\n expression,\n aka rvalue (read right value) and holder is a valid value holder,\n aka lvalue (read left value). \n When an assignment statement is executed, the rvalue is computed and stored in the lvalue.\n
\n
\n Assigning values to variables\n
\n \n\n \n
Prompto infers the type of a variable from its first assignment, which is generaly desirable. \n In the above example, the variable a has the type Integer. \n There are however situations where you might want the type to be explicit. \n In the first statement of the below example, the assigned type is Decimal, although the\n rvalue is an Integer. \n This is in preparation of the next statement, where the rvalue is a Decimal. \n Without the explicit type in the first statement, the second statement would be illegal\n because an Integer variable cannot hold a Decimal value.\n
\n \n \n\n
\n Assigning values to list items\n
\n
Prompto values are immutable by default. Therefore you cannot change the contents of a list, unless you\n make it\n explicit using the mutable keyword when creating the list. \n A list item assignment has the\n form list[item] = exp where exp is an expression,\n list is a list expression and item is\n an Integer expression. \n The item must be in the range 1 .. n where n is the number of items in\n the list.\n
\n \n \n\n
\n Assigning values to tuple items\n
\n
Assigning values to tuple items is done the same way as for lists.\n
\n \n \n\n
\n Assigning values to set items\n
\n
Assigning values to set items is illegal.
\n \n\n
\n Assigning values to dictionary keys\n
\n
Prompto values are immutable by default. Therefore you cannot change the contents of a dictionary, unless\n you make it\n explicit using the mutable keyword when creating the dictionary. \n A dictionary key assignment has the\n form dict[key] = exp where exp is an expression,\n dict is a dictionary expression and key is\n a Text expression.\n
\n \n \n\n
\n Assigning values to category object members\n
\n
Prompto values are immutable by default. Therefore you cannot change a member of a category object,\n unless you make it\n explicit using the mutable keyword when creating the object. \n A category member assignment has the\n form object.member = exp where exp is an expression,\n object is a category object expression and member is\n an attribute.\n
\n \n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"If else\");\n }\n\n renderContent(topicSelected) {\n return <>\n
If else statement
\n\n
An if else statement is a way to change the flow of execution based on conditions. \n The simplest if statement has the form if conditionstatements\n where condition is a boolean expression, and statements\n is a list of statements which will be executed whenever condition is true.\n
\n \n \n\n
Optionally, an if else statement can comprise an else list of statements,\n which which will be executed whenever condition is true.\n
\n \n \n\n\n
Additionally, an if else statement can comprise many else if condition list of\n statements,\n which which will be executed whenever condition is true.\n
\n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Switch\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Switch statements
\n\n
A switch statement is a way to change the flow of execution based on a variable value. \n A switch statement has the form switch on a followed by one or more\n when value statements where a is an expression,\n value is an expression compatible with a,\n and statements is a list of statements which will be executed whenever\n a matches value.
\n
Once the value is matched, and the corresponding statements are exectued, the flow of execution\n resumes at the end of the switch statement.\n
\n \n \n\n
Optionally, a switch statement can end with an otherwise clause and list of statements,\n which will be executed when no previous value matches. The otherwise clause\n must be after all the when clauses.\n
\n \n \n\n
\n Matching lists of values\n
\n\n
Switch statements support matching list of values using when in values where values\n must be a collection.\n
\n \n\n \n Note: in Objy dialect, Prompto uses the switch, case and default keywords like in C++, Java and C#.\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"For each\");\n }\n\n renderContent(topicSelected) {\n return <>\n
For each statements
\n\n
A for each statement is a way to execute a set of statements for each item in a collection. \n A simple for each statement has the form for each item in collection\n followed by a list of statements which will be executed for each item in the collection,\n where item is a variable name and collection is a collection.\n If item already exists, its type must be compatible with the item type of the\n collection.
\n \n \n\n
Optionally, a for each statement can populate an index variable.\n
\n \n \n\n
\n Breaking the iteration\n
\n\n
It is sometimes useful to break the iteration before reaching the end of the collection. This is\n achieved using the break statement.
\n \n \n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"While\");\n }\n\n renderContent(topicSelected) {\n return <>\n
While statement
\n\n
A while statement is a way to execute a set of statements while a condition is met. \n A while statement has the form while condition\n followed by a list of statements which will be executed repeatedly,\n where condition is a boolean expression.\n
\n \n \n\n
\n Breaking the iteration\n
\n\n
It is sometimes useful to break the iteration before testing the condition again. This is achieved\n using the break statement.
\n \n \n\n
The difference between a while and a do while statements is that the embedded statements in a while\n statement may never get executed,\n whilst they are executed at least once with a do while statement
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Do while\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Do while statement
\n\n
A do while statement is a way to execute a set of statements until a condition stops being met. \n A do while statement has the form do followed by a list of statements which will be\n executed repeatedly,\n followed by while condition where condition is a boolean\n expression.
\n \n \n\n
\n Breaking the iteration\n
\n\n
It is sometimes useful to break the iteration before testing the condition again. This is achieved\n using the break statement.
\n \n \n
The difference between a while and a do while statements is that the embedded statements in a while\n statement may never get executed,\n whilst they are always executed at least once with a do while statement
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Return\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Return statements
\n\n
A return statement is used to exit a method explicitly, and optionally return a value.\n In the absence of a return statement, a method exits after executing the last statement, without\n returning a value.\n A return statement has the form return optionally followed by expression, where\n expression is any valid expression. \n
\n
\n Exiting a method without returning a value\n
\n \n \n\n
\n Returning a value\n
\n \n \n\n
\n Multiple return statements\n
\n
Prompto supports multiple return statements in a method body, provided that all return expressions have\n compatible types
\n \n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Write\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Write statements
\n\n
Write expressions are used to write content to a resource such as a file or a web site.
\n
\n Writing the entire content to an inlined resource\n
\n
Writing the entire content to a resource can be achieved using an inlined resource. \n An inlined resource is initialized directly within a write statement. \n This is very useful for small files or small messages sent to outgoing network connections. \n It is however impossible to demonstrate within a browser, where programmatic access to local files is\n prohibited for security reasons. \n In the below example, we write to an inlined Buffer instead. \n ( the Buffer only exists during the execution of the statement, and therefore it cannot be read back\n to display its content )\n
\n \n\n
\n Writing content line by line to a managed resource\n
\n
Writing content line by line to a resource can be achieved using a managed resource. \n A managed resource is initialized through a with clause followed\n by do and a list of statements. \n The resource is said to be managed because Prompto will take care of resource cleanup when it\n exits\n the statements controlled by the with clause.\n
\n \n \n
It is illegal to call write or read on a resource which is\n neither managed nor inlined.
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Store\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Delete and store statement
\n\n
The Prompto language comes with a built-in data storage mechanism.
\n
\n This mechanism relies on 3rd party data store implementations. Which data store technology is\n effectively used is determined through configuration.\n Without configuration, Prompto uses a built-in in-memory non persistent data store, which helps get\n started and run tests, but is not supported for production.\n
\n\n
A data store generally provides guarantees of availability, scalability and consistency.\n However, from a programming language standpoint, the only relevant characteristic is consistency aka\n ACID (Atomicity, Consistency, Isolation, Durability).\n Many data stores provide consistency through transactions, however this does not scale well.\n Instead, other data stores provide consistency using grouped CRUD operations\n (CReate, Update, Delete).\n To ensure compatibility with most data stores, Prompto only requires the data store to support\n consistency, not transactions.\n Prompto also caters for asynchronous consistency of certain data stores, using\n the flush statement.
\n
Consistency in Prompto is achieved by grouping multiple CRUD operations in a single statement. A delete\n and store statement allows such grouping.
\n
A delete and store statement has the form store obj1, obj2 ... objn optionally\n preceded by delete obj1, obj2 ... objn optionally followed by with metadata metadata\n where obji is any valid category or category collection expression and metadata is a Document expression.\n
\n\n
\n Storing new objects\n
\n
Prompto can store any object for which the category is marked as storable, as\n follows:
\n \n \n\n
\n Updating existing objects\n
\n
Prompto storable objects have a built-in database id attribute, namely dbId provided by the\n data store.\n Only objects fetched from the store can be updated, and those objects carry their dbId.\n These objects must also be mutable, so the language is allowed to modify attribute values. \n Updating these objects can be simply done by storing them, as follows:
\n \n \n\n
\n Deleting objects\n
\n
Prompto storable objects have a built-in database id attribute, namely dbId provided by the\n data store.\n Only objects fetched from the store can be deleted, and those objects carry their dbId.\n Deleting these objects can be simply done as follows:
\n \n \n\n
\n Deleting and storing atomically.\n
\n
To ensure consistency of data, Prompto supports deleting and storing multiple objects in a single\n statement, as follows:
\n \n \n\n
\n Metadata\n
\n
If audit is enabled (and supported by the data store), Prompto can store metadata for each delete and store statement
\n
To learn more about audit, read the Library -> Audit section.
\n
Metadata is simply a Document, which can contain any data, such as the user or process initiating the change,\n the reason for the change and/or any data useful to track data changes
\n
To populate metadata, simply append with metadata ( metadata ) to the delete and store statement, as follows:
\n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Store ... then\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Store ... then statement
\n\n
A store ... then statement is a way to request storage of data on the server, return immediately, and run continuing statements locally later, once the storage is complete on the server. \n A store ... then statement has the form store then continuation, where store is a delete and store statement as described in the Store section,\n and continuation is a list of statements which are to be executed only after the storage has completed on the server.
\n \n \n
Async programming
\n
The store ... then technique is called async programming. It is useful when running code in a browser, to provide the best user experience by avoiding a non-responsive UI. \n Without it, the browser would be blocked until the storage has completed. \n You should never make assumptions on the execution sequence of async statements.\n Notably, if you call multiple async statements, you should not expect that their respective continuations will be executed in the same sequence. \n As of writing, Prompto executes async statements asynchronously only when running in the browser. In other environments, it waits for completion.
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Fetch ... then\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Fetch ... then statement
\n\n
A fetch ... then statement is a way to request data from the server, return immediately, and run continuing statements locally later, once the data is fetched from the server. \n A fetch ... then statement has the form fetch then with value continuation, where fetch is a fetch expression as described in the Fetch section,\n value is the name you want to give to the local variable holding the result, and continuation is a list of statements which are to be executed only after the data is fetched from the server.
\n \n \n
Async programming
\n
The fetch ... then technique is called async programming. It is useful when running code in a browser, to provide the best user experience by avoiding a non-responsive UI. \n Without it, the browser would be blocked until the data is completely fetched. \n You should never make assumptions on the execution sequence of async statements.\n Notably, if you call multiple async statements, you should not expect that their respective continuations will be executed in the same sequence. \n As of writing, Prompto executes async statements asynchronously only when running in the browser. In other environments, it waits for completion.
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Flush\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Flush statements
\n\n
The Prompto language comes with a built-in data storage mechanism.
>\n
\n This mechanism relies on 3rd party data store implementations. Which data store technology is effectively used is determined through configuration.\n Without configuration, Prompto uses a built-in in-memory non persistent data store, which helps get started and run tests, but is not supported for production.\n
\n\n
A data store generally provides guarantees of availability, scalability and consistency.\n However, from a programming language standpoint, the only relevant characteristic is consistency aka ACID (Atomicity, Consistency, Isolation, Durability).\n Many data stores provide consistency through transactions, however this does not scale well.\n Instead, other data stores provide consistency using grouped CRUD operations (CReate, Update, Delete).\n To ensure compatibility with most data stores, Prompto only requires the data store to support consistency, not transactions.\n
\n\n
However, some data stores only provide asynchronous consistency of CRUD operations.\n As an example, SOLR and Elastic Search index data asynchronously, which has the unfortunate consequence that newly inserted data may not be found\n by indexed queries ran immediately after storing the data.\n
\n\n
The flush statement instructs the data store to synchronously flush any pending operation, thus ensuring\n that all data previously inserted can be accessed by queries.
\n
A flush statement has the form flush.
\n
Flush statements should be used with parcimony, as they may slow down storage dramatically, depending on the data store used.
\n
If you find yourself calling flush after every store statement, you probably want to revisit your architecture.
\n\n
\n Flushing the store\n
\n
Prompto instructs the store to flush its data as follows:
\n\n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\nimport TopicItem from \"../../../content/TopicItem\";\n\nclass CallThenTopicItem extends TopicItem {\n\n render() {\n const active = this.props.topic===this.props.activeTopic;\n return <>\n
A Call then statement is a way to execute a method on the server, return immediately, and run continuing statements locally later, once the method has finished executing on the server. \n In its simplest form, a Call then statement has the form \n method then continuation \n where method is a method call as described in the Methods section,\n and continuation is a list of statements which are to be executed only after the method has finished executing on the server.
\n \n \n
For methods that return a value, and if the value is needed by the continuation, a Call then statement has the form \n method then with value continuation \n where value is the name you want to give to the local variable holding the result.
\n \n \n\n\n\n
Async programming
\n
The Call then technique is called async programming. It is useful when running code in a browser, to provide the best user experience by avoiding a non-responsive UI. \n Without it, the browser would be blocked until the method has completed (which could take seconds or minutes). \n You should never make assumptions on the execution sequence of async statements.\n Notably, if you call multiple async statements, you should not expect that their respective continuations will be executed in the same sequence. \n As of writing, Prompto executes async statements asynchronously only when running in the browser. In other environments, it waits for completion.
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Assignment from \"./Assignment\";\nimport IfElse from \"./IfElse\";\nimport Switch from \"./Switch\";\nimport ForEach from \"./ForEach\";\nimport While from \"./While\";\nimport DoWhile from \"./DoWhile\";\nimport Return from \"./Return\";\nimport Write from \"./Write\";\nimport Store from \"./Store\";\nimport StoreThen from \"./StoreThen\";\nimport FetchThen from \"./FetchThen\";\nimport Flush from \"./Flush\";\nimport CallThen from \"./CallThen\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Statements\", [ Assignment, IfElse, Switch, ForEach, While, DoWhile, Return, CallThen, Write, Store, StoreThen, FetchThen, Flush ] );\n }\n\n renderContent(topicSelected) {\n return <>\n
Statements
\n\n
So far, we've only covered definitions which can be used by a Prompto program.
\n
Definitions are necessary, but they to not themselves perform anything.
\n
Statements are the actual instructions executed by a Prompto program, and which form its logic and value.
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Precedence\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Operators precedence
\n\n
Composed mathematical expressions, such as 1 + 3 / 4 - 9 can be evaluated in many ways, depending on which operator: +, / or - is applied first. \n While humans can make decisions based on common sense, Prompto has a pre-defined set of rules to ensure the sequence is always the same. \n This is called operator precedence. In Prompto, the mathematical operator precedence is as follows:
\n
\n
- exp -> minus
\n
not exp -> logical not
\n
exp * exp -> multiply
\n
exp / exp -> divide
\n
exp % exp -> remainder
\n
exp \\ exp -> integer divide
\n
exp + exp -> add
\n
exp - exp -> subtract
\n
exp < exp -> less than
\n
exp <= exp -> less than or equal
\n
exp > exp -> greater than
\n
exp >= exp -> greater than or equal
\n
exp = exp -> equal
\n
exp ~ exp -> roughly equal
\n
exp or exp -> logical or
\n
exp and exp -> logical and
\n
\n
This means that in the above expression 1 + 3 / 4 - 9, the evaluation is performed in the following sequence:\n 3 / 4, then 1 + 0.75 and finally 1.75 - 9.\n
\n
Although Prompto precedence is similar to most programming languages, the above list can be hard to remember. \n Precedence can become even more complex with Prompto, because it uses a number of keywords as operators,\n such as in, contains, as and others. \n The recommended way to keep code unambiguous and avoid mistakes is to use a parenthesis expression.\n
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Parenthesis\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Parenthesis expressions
\n\n
A parenthesis expression is used to manage precedence. \n A parenthesis expression is a code fragment which produces a value, whose type is determined by the enclosed value, and which can then be used as an input for other operations: print, write, method call and so forth. \n A parenthesis expression has the form ( exp ).\n
\n \n
In the above example, both expressions, with or without parenthesis, trigger the same result. But using parenthesis makes it clear for readers what the intent is.
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Nothing\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Nothing/None/null value
\n\n
In Prompto, all values are objects. \n But what if the result of a computation cannot be determined? What object should be returned by the\n computation? \n The null value is used to return non-values. \n The null value has the following form:
\n
\n
nothing in the E dialect
\n
None in the M dialect
\n
null in the O dialect
\n
\n \n
Please note that whatever the dialect, the null value always prints out as 'null'.
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"This\");\n }\n\n renderContent(topicSelected) {\n return <>\n
This/self value
\n\n
Prompto supports user defined types called categories, for which specialized methods can also be\n defined. \n When executing those methods, it can be necessary to refer to the current object. \n This is achieved using the this value. \n A this value has the following form:
\n
\n
this in the E dialect
\n
self in the M dialect
\n
this in the O dialect
\n
\n \n
Please note that in the above example, this is used to disambiguate the name parameter from the name attribute. \n In Prompto category methods, this is implicit. \n This is similar to Java and C#, but opposite to Python or JavaScript. \n Please also note that name is a predefined Text attribute.\n
\n\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Equality\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Equality expressions
\n\n
Equality expressions are used to check for equality (or inequality) of 2 values. \n An equality expression is a code fragment which produces a Boolean value, which can then be\n used as an input for other operations: print, write, method call and so forth. \n In the context of programming, equality can have 2 meanings, whether 2 values are the same computable\n object, or the values themselves are actually equal. \n
\n
\n Checking equality of objects\n
\n
Checking equality of objects is done using the is operator. \n Inequality of objects is checked using the is not operator. \n In the below example, a and b refer to the same value. \n On the other hand, a and c refer to different objects (although those objects\n have equal value).\n
\n \n \n\n
\n Checking equality of values\n
\n
Comparing equality of values is done using the = operator in E, or\n the == operator in O or M. \n Inequality of values is checked using the {String.raw`<>`} operator in E, or the != operator in O or M. \n In the below example, a and b have the same value. \n On the other hand, a and c have different values.\n
\n \n \n\n
\n Checking rough equality of values\n
\n
Strict equality is not always desirable. For example \"hello\" and \"HELLO\" are\n not equal values. \n However, it is sometimes desirable to treat them as equal. \n Rough equality applies to Text values only (this may be extended in the future). \n Rough equality of values is checked using the ~ operator in E, or\n the ~= operator in O or M. \n
\n \n \n\n
Checking equality of user defined values
\n\n
Prompto supports user defined equality. See categories for details.
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Comparison\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Comparison expressions
\n\n
Comparison expressions are used to compare values with order in mind (which is greater?). \n A comparison expression is a code fragment which produces a Boolean value, which can then\n be used as an input for other operations: print, write, method call and so forth. \n A comparison expression has the form a op b where op is one the\n following comparison\n operators: <, <=, > and >=. \n Please note that < and >= are mutually exlusive, same\n for <= and >. \n Also note that Prompto can only compare compatible values (it does not make sense to compare text and\n number).\n
\n
Comparing Text values
\n\n
Prompto compares Text values lexicographically i.e. using their underlying Unicode representation.
\n \n \n\n
Comparing Character values
\n\n
Prompto compares Character values lexicographically i.e. using their underlying Unicode\n representation.
\n \n \n\n
Comparing Integer and Decimal values
\n \n \n\n
Comparing Date values
\n \n \n\n
Comparing Time values
\n \n \n\n
Comparing DateTime values
\n \n \n\n
Comparing user defined values
\n\n
Prompto supports user defined comparisons. See categories for details.
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Minus\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Minus expressions
\n\n
Minus expressions are expressions used to reverse a value. \n A minus expression is a code fragment which produces a value, whose type is determined by the value\n being reversed, and which can then be used as an input for other operations: print, write, method call\n and so forth. \n The returned type is always the same as the expression itself.\n
\n
Minus expressions should not be confused with Subtract expressions, which use the same\n operator -. \n
\n
\n Reversing Integer and Decimal values\n
\n \n \n\n
\n Reversing Period values\n
\n \n \n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Add\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Add expressions
\n\n
Add expressions are used to add 2 values. \n An add expression is a code fragment which produces a value, whose type is determined by the values being added, and which can then be used as an input for other operations:\n print, write, method call and so forth. \n An add expression has the form a + b.\n
\n
Add expressions are sometimes commutative, but not always. Adding numbers is commutative, but adding Texts is not. \n However, to help in programming, Prompto supports implicit commutation, where if a + b does not make sense, it will treat it as b + a.\n
\n\n
Adding Text or Character values and other values
\n
Adding a Text or Character value a and any other value b is legal if b has a textual representation. \n It returns a Text value, concatenating a and b.\n
\n \n \n\n
Adding Integer and Decimal values
\n
Adding Integer and Decimal values returns an Integer value if both values are Integer, and a Decimal otherwise.
\n \n \n\n
Adding Date and Period values
\n
Adding Date and Period values returns a Date value, the Time section of the Period value is ignored.
\n \n \n\n\n
Adding Time and Period values
\n
Adding Time and Period values returns a Time value, the Date section of the Period value is ignored.
\n \n \n\n
Adding DateTime and Period values
\n
Adding DateTime and Period values returns a DateTime value.
\n \n \n\n
Adding Period and Period values
\n
Adding Period and Period values returns a Period value.
\n \n \n\n
Adding List and List or Set values
\n
Adding List and List or Set values is legal if both collections have the same item type. It returns a List value.
\n \n \n\n
Adding Set and List or Set values
\n
Adding Set and List or Set values is legal if both collections have the same item type. It returns a Set value.
\n \n \n\n
Adding Tuple and Tuple, List or Set values
\n
Adding Tuple and Tuple, List or Set values returns a Tuple value.
\n \n \n\n
Adding Dictionary and Dictionary values
\n
Adding Dictionary and Dictionary values is legal if both collections have the same item type. It returns a Dictionary value. \n The items in the right-hand value supersede the items in the left-hand value if they have the same key.\n
\n \n \n\n
Adding user defined values
\n\n
Prompto supports adding user defined values. See categories for details.
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Subtract\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Subtract expressions
\n\n
Subtract expressions are used to subtract 2 values. \n A subtract expression is a code fragment which produces a value, whose type is determined by the values\n being subtracted, and which can then be used as an input for other operations: print, write, method call\n and so forth. \n A subtract expression has the form a - b. \n
\n
\n Subtracting Integer and Decimal values\n
\n
Subtracting Integer and Decimal values returns an Integer value if both values are Integer, and a Decimal\n otherwise.\n
\n \n \n\n
\n Subtracting Date and Period values\n
\n
Subtracting Date and Period values returns a Date value, the Time section of the Period value is ignored.\n
\n \n \n\n
\n Subtracting Date and Date values\n
\n
Subtracting Date and Date values returns a Period value.\n
\n \n \n\n
\n Subtracting Time and Period values\n
\n
Subtracting Time and Period values returns a Time value, the Date section of the Period value is\n ignored.\n
\n \n \n\n
\n Subtracting Time and Time values\n
\n
Subtracting Time and Time values returns a Period value.\n
\n \n \n\n
\n Subtracting DateTime and Period values\n
\n
Subtracting DateTime and Period values returns a DateTime value.\n
\n \n \n\n
\n Subtracting DateTime and DateTime values\n
\n
Subtracting DateTime and DateTime values returns a Period value.\n
\n \n \n\n
\n Subtracting Period and Period values\n
\n
Subtracting Period and Period values returns a Period value. \n
\n \n \n\n
Subtracting user defined values
\n\n
Prompto supports subtracting user defined values. See categories for details.
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Multiply\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Multiply expressions
\n\n
Multiply expressions are used to multiply 2 values. \n A multiply expression is a code fragment which produces a value, whose type is determined by the values\n being subtracted, and which can then be used as an input for other operations: print, write, method call\n and so forth. \n A multiply expression has the form a * b. \n The * operator is used because x being a letter, it can be used as a name,\n which would be confusing.\n
\n
\n Multiplying Integer and Decimal values\n
\n
Multiplying Integer and Decimal values returns an Integer value if both values are Integer, and a Decimal\n otherwise.\n
\n \n \n\n
\n Multiplying Text or Character and Integer values\n
\n
Multiplying Text or Character and Integer values returns a Text value, where the left-hand side is\n concatenated n times.\n
\n \n \n\n
\n Multiplying Period and Integer values\n
\n
Multiplying Period and Integer values returns a Period value.\n
\n \n \n\n
\n Multiplying List and Integer values\n
\n
Multiplying List and Integer values returns a List value, where the left-hand side is added to\n itself n times. This is convenient to initialize large lists.\n
\n \n \n\n
Multiplying user defined values
\n\n
Prompto supports multiplying user defined values. See categories for details.
\n\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Divide\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Divide expressions
\n\n
Divide expressions are used to divide 2 values. \n A divide expression is a code fragment which produces a value, whose type is determined by the values\n being subtracted, and which can then be used as an input for other operations: print, write, method call\n and so forth. \n A divide expression has the form a / b. \n Additionally, Prompto supports integer division, using the form a \\ b, and remainder using\n the form a % b (also known as modulo). \n
\n
\n Dividing Integer and Decimal values\n
\n
Dividing Integer and Decimal values returns a Decimal value.\n
\n \n \n\n
\n Integer division of Integer and Decimal values\n
\n
Integer division of Integer and Decimal values returns an Integer value. The right-hand side must be an\n Integer.\n
\n \n \n\n
\n Remainder of Integer values\n
\n
Remainder of Integer values returns an Integer value.
\n \n \n\n
\n Remainder of Decimal values\n
\n
Remainder of Decimal values returns a Decimal value.\n
\n \n \n\n
Dividing user defined values
\n\n
Prompto supports dividing user defined values. See categories for details.
\n\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Logical\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Logical expressions
\n\n
Logical AND
\n\n
Logical AND expressions are used to check both of 2 Boolean values. \n A logical AND expression is a code fragment which produces a Boolean value, which can then\n be used as an input for other operations: print, write, method call and so forth. \n A logical AND expression has the\n form a op b where a and b are Boolean values\n and op is one the following comparison operators:
\n
\n
and in the E and M dialects
\n
&& in the O dialect
\n
\n\n
Prompto is guaranteed to check a first, and only check b if a is\n true.
\n \n \n\n
Logical OR
\n\n
Logical OR expressions are used to check either of 2 Boolean values. \n A logical OR expression is a code fragment which produces a Boolean value, which can\n then be used as an input for other operations: print, write, method call and so forth. \n A logical OR expression has the\n form a op b where a and b are Boolean values\n and op is one the following comparison operators:
\n
\n
or in the E and M dialects
\n
|| in the O dialect
\n
\n\n
Prompto is guaranteed to check a first, and only\n check b if a is false.
\n \n \n\n
Logical NOT
\n\n
Logical NOT expressions are used to reverse Boolean values. \n A logical NOT expression is a code fragment which produces a Boolean value, which\n can then be used as an input for other operations: print, write, method call and so forth. \n A logical NOT expression has the form op a where a is a Boolean\n value and op is one the following comparison operators:
\n\n
\n
not in the E and M dialects
\n
! in the O dialect
\n
\n \n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Ternary\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Ternary expressions
\n\n
Ternary expressions are expressions used to provide alternate values depending on a logical\n expression. \n A ternary expression is a code fragment which produces a value, which can then be used as an input for\n other operations: print, write, method call and so forth. \n A ternary expression has the form:
\n
\n
condition ? value-if-true : value-if-false in O dialect
\n
value-if-true if condition else value-if-false in M and E\n dialects\n
\n
\n
where condition is a boolean expression\n and value-if-true and value-if-false are expressions with compatible\n types.\n
\n\n \n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Item\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Item expressions
\n\n
Item expressions are used to retrieve a value from a collection value. \n An item expression is a code fragment which produces a value, whose type is determined by the value\n being retrieved,\n which can then be used as an input for other operations: print, write, method call and so forth. \n An item expression has the\n form collection[item] where collection\n is a collection value and item has the type expected\n by collection. \n
\n\n
List item
\n\n
An item from a List value must be retrieved using an Integer, ranging from 1\n to n where n is the number of items in the List value. \n If the item value is out of range, an INDEX_OUT_OF_RANGE error will be raised. \n The type of the resulting value is the List item type.\n
\n \n \n\n
Tuple item
\n\n
An item from a Tuple value must be retrieved using an Integer, ranging from 1\n to n where n is the number of items in the Tuple value. \n If the item value is out of range, an INDEX_OUT_OF_RANGE error will be raised. \n Prompto cannot infer the type of Tuple items, so the type of the resulting value is Any.\n
\n \n \n\n
Range item
\n\n
An item from a Range value must be retrieved using an Integer, ranging from 1\n to n where n is the number of items in the Range value. \n If the item value is out of range, an INDEX_OUT_OF_RANGE error will be raised. \n The type of the resulting value is the Range item type.\n
\n \n \n\n
Dictionary item
\n\n
An item from a Dictionary value must be retrieved using a Text key. \n If the Dictionary has no value for the key, it will return the null value. \n The type of the resulting value is the Dictionary item type.\n
\n \n \n\n
Document item
\n\n
An item from a Document value must be retrieved using a Text key. \n If the Document has no value for the key, it will return the null value. \n Prompto cannot infer the type of Document items, so the type of the resulting value is Any.\n
\n \n \n\n
Text item
\n\n
Although Text values are considered 'atomic' by Prompto, it can be convenient to sometimes treat them as\n a List of Character. \n An item from a Text value must be retrieved using an Integer, ranging from 1\n to n where n is the number of characters in the Text value. \n If the item value is out of range, an INDEX_OUT_OF_RANGE error will be raised. \n The type of the resulting value is a Character.\n
\n \n \n\n
Set item
\n\n
Set items have no given order, so it does not make much sense to retrieve a given Set item. \n It is also a slow operation, because Prompto needs to iterate over the items until it reaches the\n selected one. \n It can however be convenient during development to retrieve Set items. This is the only reason\n why Prompto supports this feature.
\n
An item from a Set value must be retrieved using an Integer, ranging from 1 to n where n is\n the number of items in the Set value. \n If the item value is out range, an INDEX_OUT_OF_RANGE error will be raised. \n The type of the resulting value is the Set item type.\n
\n
You must NOT use Set items in production code. This feature is for development only.
\n \n \n\n
(in JavaScript, Set items are retrieved in the order used to create them, which is why in the above\n example, the retrieved values are the same as the input values.\n You must NOT rely on this behavior, which is a side effect of the JavaScript engine\n implementation)
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Slice\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Slice expressions
\n\n
Slice expressions are used to extract a sub-collection of a collection value. \n A Slice expression is a code fragment which produces a value, whose type is determined by the value\n being retrieved,\n which can then be used as an input for other operations: print, write, method call and so forth. \n A Slice expression has the form collection[start:end]\n where collection is a collection value and start and end are\n Integer values. \n Either start or end can be omitted, but not both. If omitted,\n they are replaced by their default value\n i.e. 1 and n where n is the number of collection items. \n The end value can be negative, in which case Prompto will count backwards. \n Both start and end items are included in the result. \n If either start or end value is out of range,\n an INDEX_OUT_OF_RANGE error will be raised.\n
\n\n
List slice
\n\n
The type of the resulting value is the same as the List value.
\n \n \n\n
Range slice
\n\n
The type of the resulting value is the same as the Range value.
\n \n \n\n
Text slice
\n\n
Although Text values are considered 'atomic' by Prompto, it can be convenient to sometimes treat\n them as a List of Character. \n The type of the resulting value is a Text.\n
\n \n \n\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Fiilter\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Filter expressions
\n\n
Filter expressions are used to filter content of a collection.
\n\n
\n Filtering a collection\n
\n
Filtering a collection produces an Iterator value, which can then be used as an input for other constructs. \n Such an expression has the form collection filtered where item => predicate \n where collection is a collection expression, item is a variable identifier,\n and predicate is a boolean expression which can use item as a local variable holding the current collection item being evaluated.
\n\n \n \n
\n Alternately, a more explicit form can be used as follows:\n
\n\n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Natural\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Sorting natural expressions
\n\n
Texts, numbers and dates have a natural sorting order.
\n
Sorting a collection of such values is done using natural sorting, as follows:
\n \n \n\n
Sorting backwards
\n\n
Sorting backwards is done by inserting the descending keyword after\n the sorted one. \n In O and M dialects, the desc abbreviated keyword is preferred.
\n \n \n\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Custom\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Sorting collections of custom objects
\n\n
Custom objects do not have a natural sorting order. It is therefore necessary to specify\n how to compare custom objects. \n This is done by providing a key on which exists a natural order.
\n\n
Sorting by existing key attribute
\n\n
When a custom object comprises a key, this attribute can be used to sort a collection implicitly.\n
\n \n \n\n
Sorting by specified attribute
\n\n
Any attribute which has a natural sording order can be used to sort a collection explicitly.
\n \n \n\n
Sorting by expression
\n\n
Alternately, lists of custom objects can be sorted using expressions as key, as follows:
\n \n \n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Advanced\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Advanced sorting
\n\n
For scenarios where natural sorting or simple sorting are not sufficient, prompto supports advanced sorting using the arrow notation.
\n\n
Single variable arrow sorting
\n\n
Single variable arrow sorting is used to return a key from each item in the collection. \n The returned value must have a natural sort order.\n
\n\n
\n As an example, you can sort a Text collection by character count as follows:\n
\n \n \n\n
Double variable arrow sorting
\n\n
For more complex scenarios where no key with a natural sort order can be provided, prompto supports direct comparison of instances. \n The arrow expression receives 2 items such as a and b which can then be compared. \n The returned value must be an Integer, as follows:
\n
\n
If the value is positive, prompto will treat a as greater than b
\n
If the value is negative, prompto will treat b as greater than a
\n
If the value is 0, prompto will treat a and b as equal
\n
\n
\n In the below example, if a person's name first letter equals the person's city first letter, we sort by city population, otherwise we sort\n by name descending:\n
\n \n \n\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport SortNatural from \"./SortNatural\";\nimport SortCustom from \"./SortCustom\";\nimport SortAdvanced from \"./SortAdvanced\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Sort\", [SortNatural, SortCustom, SortAdvanced]);\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Sort expressions
\n\n
Sort expressions are used to produce a sorted list from an existing collection. \n A Sort expression is a code fragment which produces a list, whose item type is the same as the item\n type of the collection being sorted,\n which can then be used as an input for other operations: print, write, method call and so forth. \n A Sort expression has the form sorted collection\n where collection is a collection value. \n
\n
The type of the resulting value is always a list.
\n
Sorting backwards is done by inserting the descending keyword after\n the sorted one. \n In O and M dialects, the desc abbreviated keyword is preferred.
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Contain\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Contain expressions
\n\n
Contain expressions are used to check if a value is a member of a collection value. \n An membership expression is a code fragment which produces a Boolean value, which can then\n be used as an input for other operations: print, write, method call and so forth. \n Contain expressions can have one of the following forms:
\n
\n
a in b, where a is any value\n and b is a collection\n
\n
b has a, where a is any value\n and b is a collection\n
\n
a has any b,\n where a and b are collections\n
\n
a has all b,\n where a and b are collections\n
\n
\n
Or the negative forms:
\n
\n
a not in b, where a is any value\n and b is a collection\n
\n
b not has a, where a is any value and b is\n a collection\n
\n
a not has any b, where a and b are\n collections\n
\n
a not has all b, where a and b are\n collections\n
\n
\n \n
\n Text Contain\n
\n
Text Contain expressions check whether a Character or Text value belongs to a given Text value. \n When checking for any or all, the collection of characters can be specified\n using a Text,\n which is then treated as collection of characters.\n
\n \n \n\n
\n Range Contain\n
\n
Range Contain expressions check whether a value belongs to a given Range value.\n
\n \n \n\n
\n List Contain\n
\n
List Contain expressions check whether a value belongs to a given List value.\n
\n \n \n\n
\n Set Contain\n
\n
Set Contain expressions check whether a value belongs to a given Set value.\n
\n \n \n\n
\n Tuple Contain\n
\n
Tuple Contain expressions check whether a value belongs to a given Tuple value.\n
\n \n \n\n
\n Dictionary Contain\n
\n
Dictionary Contain expressions check whether a Dictionary value contains a given Text key. \n They are equivalent to using Set Contain expressions on dict.keys. \n To check for value contain, you should use Contain expressions on dict.values.\n
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Type\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Type expressions
\n\n
Type expressions are used to check for equality or equivalence of value type. \n A type expression is a code fragment which produces a Boolean value, which can then be used\n as an input for other operations: print, write, method call and so forth. \n
\n
\n Checking type of built-in values\n
\n
Checking type of built-in values is done using the is a or is an operator. \n Inequality of types is checked using the is not a or is not an operator.\n Prompto supports.\n
\n \n \n\n
\n Checking type of user defined values\n
\n
When checking type of user defined values, Prompto checks for compatibility rather than equality.\n
\n \n \n\n
\n Auto downcast\n
\n
When checking type of user defined values in an if statement, Prompto automatically\n downcasts the value type for the corresponding statements.\n
\n \n \n\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Member\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Member expression
\n\n
Member expressions are used to retrieve the value of an attribute of an object. \n A member expression is a code fragment which produces a value whose type is determined by the attribute\n type,\n which can then be used as an input for other operations: print, write, method call and so forth. \n Member expressions have the following form: \n instance.name, where instance is any value\n and name\n is the name of a an attribute supported by this value.\n
\n
Prompto uses the same syntax for built-in attributes and user defined ones.
\n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Method\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Method expressions
\n\n
Method expressions are expressions used to convey method definitions. \n A method expression is a code fragment which produces a Method value, whose exact type is determined by\n the method prototype, and which can then be used as an input for method invocations. \n A method expression has the following form:
\n
\n
In O or M: name (without parenthesis), where name is the\n name of a concrete method.\n
\n
In E: Method: name where name is the name of a concrete\n method.\n
\n
\n
Method values are not storable.\n
\n
In the below example, we declare a prototype myProto. \n We then define a method printResultOfMyProto which accepts myProto as a\n parameter type. \n Later on, we define a method myMethod, which happens to have the same prototype\n as myProto. \n Finally, in the main method, we instantiate a Method expression, which can be used as a\n parameter when calling printResultOfMyProto. \n
\n\n\n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Code\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Code expressions
\n\n
Code expressions are expressions used to convey Prompto code fragments. \n A code expression is a code fragment which produces a Code value, which can then be used as an input for\n code invocations. \n A code expression has the form Code: code, where code is a\n fragment of Prompto code.\n Code values are not storable.\n
\n
In the below example, we declare a method myMethod which accepts Code code as a\n parameter type. \n In the main method, we instantiate a Code expression, which is then used as a parameter\n when calling myMethod.\n
\n \n \n\n
For security reasons, Code expressions can only be created from Prompto code, not from text. \n This ensures that methods receiving Code parameters are fully checked before execution time. \n A method receiving Code parameters can be seen as a Method template, instantiated when called with the\n actual Code expression.\n
\n\n\n >;\n }\n\n }\n\n export default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Read\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Read expressions
\n\n
Read expressions are used to read content from a resource such as a file or a web site. \n A read expression is a code fragment which produces a Text value, which can then be used as\n an input for other operations: print, write, method call and so forth.\n
\n
\n Reading the entire content of an inlined resource\n
\n
Reading the entire content of a resource can be achieved using an inlined resource. \n An inlined resource is initialized directly within a read expression. \n This is very useful for small files or small messages received from incoming network connections.\n
\n \n \n\n
\n Reading content line by line from a managed resource\n
\n
Reading content line by line from a resource can be achieved using a managed resource. \n A managed resource is initialized through a with clause followed by a list of\n statements. \n The resource is said to be managed because Prompto will take care of resource cleanup when it\n exits\n the statements controlled by with clause.\n
\n \n \n\n
It is illegal to call write or read on a resource which is\n neither managed nor inlined.
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Fetch\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Fetch expressions
\n\n
Fetch expressions are used to fetch objects from the data store.
\n\n
\n Fetching one object\n
\n
Fetching one object from the store produces an object which can then be used as an input for other\n constructs. \n Such an expression has the form fetch one where predicate (\n and/or predicate ),\n where predicate is a boolean expression in which any attribute can be used to filter\n the data.
\n
The type of the object retrieved is the type it had the last time the object was stored (or null if no\n object was found).\n
\n \n \n\n
\n Fetching one object with a given category\n
\n
Fetch expressions can be specialized to return an object of a given user type. \n The type of the variable to which the object is assigned is the specified user type. \n The type of the object retrieved is the type it had the last time the object was stored (or null if\n no\n object was found). \n The type is specified as follows:\n
\n \n \n\n
\n Fetching multiple objects\n
\n
Fetching multiple objects from the store produces a Cursor which can be used as an input for\n iterating constructs. \n Such an expression has the form fetch all where predicate (\n and/or predicate ),\n where predicate is a boolean expression in which any attribute can be used\n to\n filter the data.
\n
The type of each object retrieved is the type it had the last time the object was stored.\n
\n \n \n\n
\n Fetching multiple objects with a given category\n
\n
Similarly to fetching one object, fetching multiple objects expressions can be specialized to\n return\n only objects of a given user type. \n The item type of the cursor to which the object is assigned is the specified user type. \n The type of each object retrieved is the type the object had the last time the object was\n stored. \n The type is specified as follows:\n
\n \n\n
When running the above example, you'll notice that Person \"Sophie\" is not returned\n because it is\n not a Member.
\n
Searching on child fields is not supported yet (it depends heaviliy on the Store\n implementation capabilities).
\n \n\n
\n Sorting fetched objects\n
\n
When fetching multiple objects, Prompto lets you specify the order in which the objects\n are retrieved. \n This is done by specifying one or more sort attributes, and the sort direction, as\n follows:\n
\n \n\n
Sorting on child fields is not supported yet (it depends heaviliy on the Store\n implementation capabilities).
\n \n\n
Paging results
\n
When fetching a large number of objects, it can be convenient to only retrieve a\n subset of them. \n This is particularly convenient when paging results in a web site. \n Prompto lets you specify a slice of objects to be retrieved, as follows:
\n \n\n
Additionally, the Cursor object returned by the fetch expression has 2\n attributes: count and totalCount,\n which can be used to know how many objects are being returned, and how many\n objects in the Store satisfy the query before slicing.
\n\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Precedence from \"./Precedence\";\nimport Parenthesis from \"./Parenthesis\";\nimport Nothing from \"./Nothing\";\nimport This from \"./This\";\nimport Equality from \"./Equality\";\nimport Comparison from \"./Comparison\";\nimport Minus from \"./Minus\";\nimport Add from \"./Add\";\nimport Subtract from \"./Subtract\";\nimport Multiply from \"./Multiply\";\nimport Divide from \"./Divide\";\nimport Logical from \"./Logical\";\nimport Ternary from \"./Ternary\";\nimport Item from \"./Item\";\nimport Slice from \"./Slice\";\nimport Filter from \"./Filter\";\nimport Sort from \"./Sort\";\nimport Contain from \"./Contain\";\nimport Type from \"./Type\";\nimport Member from \"./Member\";\nimport Method from \"./Method\";\nimport Code from \"./Code\";\nimport Read from \"./Read\";\nimport Fetch from \"./Fetch\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Expressions\", [ Precedence, Parenthesis, Nothing, This, Equality, Comparison, Minus, Add, Subtract,\n Multiply, Divide, Logical, Ternary, Item, Slice, Filter, Sort, Contain, Type, Member,\n Method, Code, Read, Fetch ]);\n }\n\n renderContent(topicSelected) {\n return <>\n
Expressions
\n\n
Expressions are program fragments which produce values. \n Expressions are used to fetch values, transform them or combine them. \n The value produced by an expression can then be used as argument for other expressions and statements.
switch on error doing: \n list of protected statements
\n
when type: \n list of statements
\n
when in [ type1, type2, ... ]: \n list of statements
\n
otherwise or when any \n list of statements
\n
always: \n list of statements
\n
\n
where error is a variable name which will be populated with the error object,\n and can be used in the corresponding handler section. \n The block must comprise at least onehandler, either a when,\n a when in, a when any or an always clause. \n There can be any number of when or when in clauses. \n If present, the when any or otherwise clause must come after all when and when any clauses,\n and before the always clause. \n If present, the always clause must be the last one.
\n \n\n
Examples of correct sequences:\n\n
{String.raw`switch on error doing:\n list of statements\nwhen in [NOT_MUTABLE, NOT_STORABLE]:\n list of statements`}
\n\n
{String.raw`switch on error doing:\n list of statements\nalways:\n list of statements`}
\n\n
{String.raw`switch on error doing:\n list of statements\nwhen NULL_REFERENCE:\n list of statements\notherwise:\n list of statements`}
\n\n
{String.raw`switch on error doing:\n list of statements\nwhen any:\n list of statements\nalways:\n list of statements`}
\n
\n \n
The execution is as follows:
\n
\n
Prompto tries to execute the list of protected statements
\n
if an error occurs:\n
\n
Prompto looks for the first when clause that accepts the error type\n
\n
if such a clause exists, Prompto executes the correponding list of statements
\n
otherwise if a when any clause exists, Prompto executes the correponding list of statements
\n
\n
\n
\n
\n
whether or not an error occurs:\n
if there is an always clause, Prompto executes the correponding list of statements
\n
\n
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Built-in\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Built-in errors
\n
Prompto is focused on business logic, so it does not provide a wide variety of error types. Instead it lets\n the underlying runtime provide details on those errors.
\n
All built-in errors are defined in the built-in Error enumerated category.
\n
The list of built-in errors is:
\n
\n
READ_WRITE: a read/write error can occur when reading or writing from a resource: file, url, database\n and so forth\n
\n
NULL_REFERENCE: a null reference occurs when trying to access a member attribute or method from a null\n object\n
\n
INDEX_OUT_OF_RANGE: this error occurs when trying to access a list element < 1 or > to the number of\n elements in the list\n
\n
DIVIDE_BY_ZERO: this error occurs when trying to divide a number by 0
\n
NOT_MUTABLE: this error occurs when trying to set a member attribute on a non mutable object
\n
NOT_STORABLE: this error occurs when trying to stor an object of a category not marked as storable
\n
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Custom\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
User defined a.k.a. Custom errors
\n
There are situations not covered by built-in errors. For example, if your program reads text from a file,\n and expects certain content in that text but cannot find it, you might want to raise a specific\n error.
\n
Prompto lets you define custom errors, which extend the built-in Error enumeration of errors.
\n
Here is an example:
\n
{String.raw`define BadContentError as enumerated Error with symbols:\n MISSING_PRODUCT with \"Expecting 'product' in file!\" as text\n MISSING_PRICE with \"Could not find 'price' for product!\" as text`}\n
\n
User defined errors simply accept a text attribute, which can be displayed or logged.
\n
Once user errors are defined, they can be raised using the raise keyword:
\n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Syntax from \"./Syntax\";\nimport BuiltIn from \"./BuiltIn\";\nimport Custom from \"./Custom\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Errors\", [ Syntax, BuiltIn, Custom ]);\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Error handling
\n\n
Error handling is critical to perception of quality. Even is your application code is correct, it may\n generate errors.\n These errors may emanate from hardware (disk, network, memory), from middleware (credentials, service down),\n or from your application itself if your code meets undesirable situations and raises corresponding user\n defined errors.\n
\n\n
Prompto implements error handling using a try/fail mechanism. Here is an example:\n
\n \n
In the above example, we try to perform an illegal operation (divide by zero).\n Without precaution, this error would simply force the application to abruptly exit.\n To avoid this, we protect the potential error by wrapping our code inside a try/fail block.
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Creating\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Creating objects i.e. category instances
\n\n
In Prompto, all values (number, text, user defined...) are objects. However it is common to use\n the word object as a nickname for category instance.
\n
Creating an object i.e. instantiating a category is done by using its name, optionally followed by\n attribute assignments.
\n
The syntax varies depending on the dialect, as follows:
\n \n \n
Attribute assignments are optional, it is legal to assign only some attributes, or none.
\n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Copying\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Copying objects i.e. creating objects from existing ones
\n\n
In Prompto, attributes are semantic types i.e. they have the same meaning across the entire solution.
\n
This enables powerful features such as automatically copying attribute values between independent\n objects.
\n
In the below example, we:
\n
\n
define a Candidate category
\n
define an Employee category
\n
create a Candidate: john
\n
create an Employee: new_joiner, copied from john
\n
\n \n \n\n
Populating additional attribute values when copying objects
\n
On top of copying values, you may need to populate additional attribute values:
\n \n \n\n
Overwriting attribute values when copying objects
\n
Eventually, you might need to overwrite existing values:
\n \n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Embedding\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Embedding objects
\n\n
Once a category is defined, it can be used as a type for attribute definitions.
\n
In the below example, we:
\n
\n
define a Person category
\n
define an author attribute with type Person.
\n
use this person attribute to define the Book category:
\n
\n \n
In the above example, we have embedded a Person instance into a Book instance.
\n\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Modifying\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Modifying instances
\n\n
Attribute values are normally set when creating instances.
\n\n
This covers most use cases, but there are situations where you want to set or change attribute values\n after object creation.
\n\n
Setting attribute value after object creation is done using assignment statements of the\n form instance.name = expression,\n where instance is a value, name is the name of a an attribute\n supported by this value, and expression\n is an expression returning a value compatible with the type of name.
\n\n
However, it is worth reminding that unless specified, Prompto values are immutable.\n As a consequence, the below code is illegal and cannot be executed:
\n\n\n \n
This is because the Person object assigned to variable p is not marked\n as mutable.
\n
In order to set an attribute value after object creation, the category instance must me marked as\n mutable when created. The below code will run:
\n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Storing\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Storing instances
\n\n
Categories are the base unit of storage in a Prompto data store. \n Only storable categories can be stored and fetched. \n To mark a category as storable, the category keyword must be preceded with\n the storable keyword. \n Attributes are used to define the data store schema, so they must also be marked as storable.\n
\n \n \n \n\n
A storable category can comprise both storable and non-storable attributes. \n Only storable attributes are stored (and therefore retrieved).
\n
In the below example,\n only firstName and lastName are storable, dateOfBirth is not:\n
\n \n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Extending\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Extending categories
\n\n
Prompto supports category inheritance, where a category extends another category, and therefore\n inherits its attributes and methods. \n In the E dialect, this is done by using the name of the category being extended in place of\n the category keyword. \n In the O dialect, this is done by appending to the category definition the extend keyword\n followed the name of the category being extended. \n In the M dialect, this is done by inserting the name of the category being extended before the\n list of attributes.\n
\n \n \n\n
A category extending another category is often referred to as a derived category.
\n
An object of a derived category can be used anywhere an object of the original category is expected.
\n
In the below example, the printPerson method expects a Person object, and will accept any\n object inheriting from Person:
\n \n \n\n\n
Multiple inheritance
\n\n
Prompto supports multiple inheritance, where a category extends not just one category, but\n many. \n This is done by using a list of category names rather than just one:\n
\n \n \n
In the above example, a SmartPhone is a Product, a Computer and a Phone.
\n
It inherits attributes and methods from those 3 categories\n i.e. brand, operatingSystem and supportedNetwork:
\n \n \n\n
Multiple inheritance of attributes in Prompto does not suffer from the deadly diamond problem.\n This is thanks to its unique reified attributes feature, where attributes are semantic types\n defined outside categories.
\n
In the above example, since attributes are defined globally,\n the brand attribute is the same in all 4 categories, and has the same meaning. From there,\n the SmartPhone category only inherits\n the brand attribute once (as opposed to multiple times in most OOP languages which\n support multiple inheritance).
\n \n
Multiple inheritance of methods in Prompto follows the inheritance sequence. This is described in the\n next section.
\n\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../../content/Topic\";\nimport PromptoPlayer from \"../../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Definition\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Defining category methods
\n
A category method is identified by its category and its prototype, defined by its name and its accepted arguments.
\n
A category method is defined by declaring, within a category definition, its prototype and optional return value, followed by the method statements.
\n
The minimal prototype has the following form:
\n
\n
In E dialect: define methodName as method doing:
\n
In O dialect: methodName() {}
\n
In M dialect: def methodName():
\n
\n\n
A category method must be defined within a category definition, as follows:
\n \n \n\n\n
Method names
\n
A method name can be any valid identifier i.e. a word starting with a letter and followed by any number of letters or digits.
\n \n
Method return types
\n
A Prompto method can return any number of values.
\n
If no value is returned, the return type is known as Void type.
\n
If exactly 1 value is returned, the return type can be specified. When not specified, it is inferred by Prompto.
\n
Specifying the return type is done as follows:
\n
\n
In E dialect: define methodName as method returning Type doing:
\n
In O dialect: Type method methodName() {}
\n
In M dialect: def methodName() -> Type:
\n
\n
where Type is the name of an existing type.
\n
If more than one value is returned, the return type is Tuple. This can be convenient for quick development\n but should not be used for large scale applications, because Prompto does not infer the type of Tuple elements.
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../../content/Topic\";\nimport PromptoPlayer from \"../../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Calling\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Calling category methods
\n
Calling category methods is done simply by appending to the category instance variable a '.' followed by\n the method name,\n optionally followed by its arguments name and value pairs.
\n \n \n\n
Thanks to naming, arguments can be provided in any sequence, which makes it clear how the arguments are\n used.
\n \n \n\n
Naming the arguments is mandatory in Prompto.
\n
However, when a method accepts only 1 argument, the argument name can be omitted:
\n \n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../../content/Topic\";\nimport PromptoPlayer from \"../../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Arguments\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Category method arguments
\n\n
A Prompto category method can accept 0 or more arguments.
\n
Arguments must be declared (there is no implicit argument such as arguments in JavaScript).
\n
When mutiple arguments are declared, they must be separated by commas. In E dialect only, the last comma\n is replaced by the and keyword.
\n
Arguments are typed, in one of the following ways:
\n
\n
Attribute argument, with the form name,\n where name is\n an existing Attribute name.\n
\n \n \n
\n
Typed argument, with the form Type x,\n where type is an\n existing Type name\n and x can be any valid variable identifier.
\n \n \n
\n
Anonymous type attribute argument, with the form any x with\n attribute name,\n where x can be any valid variable\n identifier and name is an existing Attribute name. This form accepts more than\n one\n attribute.
\n \n \n
\n
Extended type argument, with the form Type x with\n attribute name,\n where type is an existing category name, x can be any valid\n variable\n identifier and name is an existing Attribute name. This form accepts more than\n one\n attribute.
\n \n \n
\n
\n\n
Default argument values
\n
Prompto supports default argument values, which remove the need to always pass all\n arguments to a method.
\n
Default argument values must be constant values, i.e. they cannot vary during program execution. Good candidates\n are literals, null, and enumerated values.
\n \n \n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../../content/Topic\";\nimport PromptoPlayer from \"../../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Overloading\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Overloading category methods
\n\n
Prompto supports category method overloading, where 2 methods of the same category have the same\n name but different parameters.
\n
When a category method is overloaded, Prompto selects the most appropriate one based on the best\n match of the proposed parameters\n with respect to the required arguments. This matching is performed using the sequence of the parameters\n in the method call.
\n
In the below example, the 2 methods have the same name, but a different number of arguments:
\n \n \n\n
Category method overloading also works with different argument types.
\n
Each overridden method provides a behavior specific to its argument types.
\n \n \n\n
When a category method is overloaded, Prompto selects the most appropriate one at runtime i.e. the\n one for which the actual parameters best match the required method arguments,\n based on the sequence of the method call. This is different from many OOP languages such as Java, C# or\n C++,\n where the resolution is decided at compile time.
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../../content/Topic\";\nimport PromptoPlayer from \"../../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Overriding\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n\n
Overriding category methods
\n\n
When a category implements a method, it can be handy to override that method in derived categories.
\n
This is done simply by providing with the derived category definition a new version of the method\n defined in the parent category.
\n
In the below example, we:
\n
\n
define an 'Animal' category with a 'speak' method
\n
define an 'Dog' category, derived from 'Animal', which overrides the 'speak' method
\n
define an 'Cat' category, derived from 'Animal', which overrides the 'speak' method
\n
call the 'speak' method for an instance of each of them
\n
\n \n\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../../content/Topic\";\nimport PromptoPlayer from \"../../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Getters\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Getters
\n\n
Category attributes can be accessed using instance.name,\n where instance is a value and name\n is the name of a an attribute supported by this value. \n This covers most use cases, but there are situations where you want the returned value to be computed,\n rather than just read from the object.\n This is where getters are useful. \n Getters are special methods defined as part of a category definition, and attached to a\n particular attribute name.\n When a getter is defined and a piece of code tries to read the corresponding attribute, Prompto will\n call the getter instead. \n In the below example, we define a getter for a fullName attribute:\n
\n \n \n\n
Cyclical dependencies
\n
Prompto manages cyclical dependencies between getters. Cyclical dependencies occur when for example\n getter for 'a' reads 'b' and getter for 'b' reads 'a'.\n During the execution of a getter body, it is guaranteed that the getter being executed will not be\n called again for the current object\n until the execution of the initial getter is complete.
\n \n\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../../content/Topic\";\nimport PromptoPlayer from \"../../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Setters\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Setters
\n\n
Attribute values are normally set simply by copying the value provided when creating objects or assigning\n a value to an attribute.
\n\n
This covers most use cases, but there are situations where you want to:
\n\n
\n
validate the value in a way which is not supported by attribute constraints
\n
transform the value \"on the fly\" rather than just store it
\n
take the opportunity to populate other values
\n
\n\n
This is where setters are useful.
\n
Setters are special methods defined as part of a category definition, and attached to a particular\n attribute name.\n When a setter is defined and a piece of code tries to set the corresponding attribute, including when\n the object is created,\n Prompto will call the setter to transform the value prior to setting it. \n Within the setter method body, the name of the attribute being set holds the value received, which can\n be used for whatever purpose.\n The setter is a function which MUST return the value to be written.
\n In the below example, we define a setter for a fullName attribute which returns a capitalized\n value, and sets the initials attribute:\n
\n \n \n\n\n
Cyclical dependencies
\n
Prompto manages cyclical dependencies between setters. Cyclical dependencies occur when for example\n setter for 'a' sets 'b' and setter for 'b' sets 'a'.\n During the execution of a setter body, it is guaranteed that the setter being executed will not be\n called again for the current object\n until the execution of the initial setter is complete.
\n \n\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../../content/Topic\";\nimport PromptoPlayer from \"../../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Operators\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Category operators
\n\n
For categories which represent common values, it can be handy to provide operators that help write simple\n code.
\n
A category operator method is a category method with a special name, which otherwise behaves like any\n regular category method.
\n
Once the category operator method is defined, it can be used in expressions involving operators.
\n
In the below example, we define an 'Amount' category with a '+' operator method:
\n \n\n
Supported operators
\n
Prompto supports binary operators i.e. operators which take 2\n operands: +, -, *, /, \\ and %.\n
\n
By definition, these operators can only accept one parameter, and MUST return a value.
\n
The parameter type and return type can be of any type.
\n
Like any category methods, operator methods can be overloaded and overridden.
\n
\n Operators are powerful constructs that let you write concise code. However, it is tempting to overuse them, thus making your code unreadable.\n It is strongly recommended to define operators only for operations which naturally translate to common thinking.\n
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Definition from \"./methods/Definition\";\nimport Calling from \"./methods/Calling\";\nimport Arguments from \"./methods/Arguments\";\nimport Overloading from \"./methods/Overloading\";\nimport Overriding from \"./methods/Overriding\";\nimport Getters from \"./methods/Getters\";\nimport Setters from \"./methods/Setters\";\nimport Operators from \"./methods/Operators\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Methods\", [ Definition, Calling, Arguments, Overloading, Overriding, Getters, Setters, Operators ]);\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Methods
\n\n
Prompto supports both global methods and category methods.
\n
In this section, we describe category methods only, global methods are described in the principal Methods section.
\n \n
Category and global methods have a lot in common, so most of the information is the same for both type of methods, and may seem redundant.
\n
There are however some differences:
\n
\n
The current object i.e. this or self:
\n
Category methods are executed in the context of a category instance. This instance can be addressed using the this or self keyword.
\n
The current object is implicit, there is no need to pass it as a parameter.
\n
\n
Method overriding:
\n
Derived categories inherit the methods defined in their parents. Prompto supports re-defining these methods in derived categories. This is called method overriding.
\n
\n
Abstract methods:
\n
Abstract methods are only supported by abstract categories. Concrete derived categories must provide an implementation of inherited abstract methods.
\n
\n
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Abstract\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Abstract categories
\n\n
Like global methods, category methods can be declared abstract. A category which contains 1 or\n more abstract method is said to be an abstract category.
\n
The category is abstract in the sense that you cannot create an object of that category. The\n reason is that if you could, Prompto would irremediably fail when\n your code tries to call an abstract method for that instance.
\n
Instead, the abstract method(s) must be defined in categories derived from it.
\n
This is done simply by providing inside the derived category definition a concrete version of the\n abstract method defined in the parent category.
\n
In the below example, we:
\n
\n
define an 'Animal' category with an abstract 'speak' method
\n
define an 'Dog' category, derived from 'Animal', which implements the 'speak' method
\n
define an 'Cat' category, derived from 'Animal', which implements the 'speak' method
\n
call the 'speak' method for an instance of each of them
\n
\n \n\n \n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Creating from \"./Creating\";\nimport Copying from \"./Copying\";\nimport Embedding from \"./Embedding\";\nimport Modifying from \"./Modifying\";\nimport Storing from \"./Storing\";\nimport Extending from \"./Extending\";\nimport Methods from \"./Methods\";\nimport Abstract from \"./Abstract\";\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Categories\", [ Creating, Copying, Embedding, Modifying, Storing, Extending, Abstract, Methods ]);\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Categories
\n\n
Prompto lets developers define domain types using category types.\n A category type is defined by composing 1 or more attributes, and/or existing category\n types. \n A simple category type is defined by simply listing its attributes, as follows:\n
\n \n \n
On top of composing attributes, categories also support dedicated methods.
\n
Prompto categories play a role similar to classes in OOP languages.
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../player/PromptoPlayer\";\nimport Topic from \"../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Singletons\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Singletons
\n
There are situations which require having one and only one instance of a given category.
\n
If, for example, you were to define a World category, chances are you would only need one\n instance.
\n
Prompto directly supports this concept through Singletons, a specialized category which has one\n and only one instance.
\n
Being a special category, a singleton supports most category features i.e. attributes and methods\n except the following:
\n
\n
a singleton cannot derive from another category or singleton
\n
a singleton cannot contain abstract methods
\n
a singleton cannot be instantiated
\n
a singleton cannot be made mutable
\n
\n\n
Accessing singleton attributes and methods
\n
Singleton attributes and methods are accessible using the singleton name, which serves as both a type and\n the only instance.
\n\n
Populating singleton attributes
\n
An immutable singleton would not be very useful, since it would only hold constant values known at coding\n time. On the other hand, it would be very\n difficult to ensure consistency of a mutable singleton in the context of multiple Workers. Prompto\n solves this problem using with blocks.
\n
In the below example, we:
\n
\n
define a 'Configuration' singleton
\n
populate its attributes inside a with block
\n
read an attribute directly from the singleton
\n
\n \n
In the above example, it is safe to read login outside a with block, because it only\n involves reading one value.
\n \n\n
Calling singleton methods
\n
Singleton methods are likely to:
\n
\n
access more than one attribute
\n
change the singleton's attribute values
\n
\n
For those reasons, singleton methods can only be called within a with block:
\n \n \n\n
How the with block works
\n
The with block ensures that only the main program or one Worker at a time can execute the\n statements contained in with block body.\n This protection spans across all with blocks for a given singleton. Internally, the main\n program or Worker takes ownership of the singleton until all\n statements in the block body are executed, thus blocking any other worker from simultaneously entering\n any with block for the singleton.
\n
JavaScript Workers do not share data, rather they communicate using messages. Although Prompto supports singletons on all platforms,\n developers are advised to avoid them in a browser if they use Workers,\n because using them can significantly slow down execution.
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../player/PromptoPlayer\";\nimport Topic from \"../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Enumerations\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Category enumerations
\n\n
An enumeration is a list of names for constant values of a particular type. \n Enumerations are practical to refer to values using symbols, rather than provide the same value again\n and again in your code. \n Prompto supports enumerations of both built-in and category types. \n This section describes enumerations of category types. \n
\n \n \n\n
Enumerated symbols are global definitions. You cannot redefine the above\n name MOTORBIKE elsewhere. \n Enumeration symbols must be composed of uppercase letters, digits and '_' only. The first character\n cannot be a digit. \n This makes it easy to recognize enumerated symbols at first glance. \n
\n
Once an enumerated symbol is defined, it can be used anywhere in place of the value itself. \n
\n \n \n\n
\n Enumeration attributes\n
\n
On top of their category attributes, category enumeration values have the following attributes:
\n
\n
name: returns the name of the enumerated symbol as a Text value
\n
\n
The enumeration itself has the following attributes:
\n
\n
symbols: returns a List of the symbols in the enumeration
\n
\n \n \n\n
\n Enumeration methods\n
\n
Category enumerations do not directly support methods. However, they can be derived from existing\n categories, making it easy to provide custom methods.
\n
In the below example, we:
\n
\n
define a 'MobileDevice' category with a 'printSpeed' method
\n
define a 'Vehicle' enumeration which derives from 'MobileDevice'
\n
call the 'printSpeed' method on an enumerated instance
\n
\n \n \n\n
Enumerations of built-in types
\n
Prompto supports Enumerations of built-in types. See Types -> Enumeration for details.
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../content/Topic\";\nimport PromptoPlayer from \"../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Resources\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Resources
\n\n
Some system resources require careful handling. For example, when you open a file for writing, the file\n is locked and becomes unavailable for reading by other programs,\n or other parts of your application. Similar constraints apply to other objects: network objects such as\n Urls, database connections, and so on.
\n
A Prompto resource is a specialized native category designed to take care of these precious\n resources, and free them automatically as soon as possible.\n To achieve this, Prompto requires resources to be either inlined or managed.\n An inlined resource is one that is not assigned to a variable,\n but rather used as an expression, and cannot therefore be accessed more than once.\n A managed resource is one that is protected using a with block.
\n
It is illegal to read or write a resource which is\n neither managed nor inlined.
\n
Prompto resources are used to read and write text. There is no support for binary data. If required,\n binary data should be handled and converted to or from Prompto objects using the host language.
\n\n
Reading text from a resource
\n\n
In the below examples, we use a Url resource, because file resources are not accessible from a browser.\n
\n\n
Prompto resources can be used to read text, either line per line, or all lines at once.
\n\n
Read all the text from an inlined resource
\n\n
When reading all the lines at once, you can simply specify the resource as a parameter to the read\n all statement.
\n \n \n\n
Read the text line by line from a managed resource
\n\n
To read the text line by line, you must manage the resource using a with block:
\n \n \n\n
Writing text to a resource
\n\n
In the below examples, we use a Buffer resource, because file resources are not accessible from a browser.\n
\n\n
Prompto can write text to resources, either line per line, or all lines at once.
\n\n
Writing all the text to an inlined resource
\n\n
When writing all the text at once, you can simply specify the resource as a parameter to\n the write statement.
\n \n \n\n
Writing the text line by line to a managed resource
\n\n
To write the text line by line, you must manage the resource using a with block:
\n \n \n\n
Prompto native resource specification
\n
A Prompto native resource must implement:
\n
\n
a close method, which is called automatically by Prompto when appropriate. This method\n cannot be called directly by Prompto code.\n
\n
a isReadable method, which is called to check whether a resource\n supports read methods\n
\n
a isWritable method, which is called to check whether a resource\n supports write methods\n
\n
a readLine method, which must return the next line of text from the resource,\n or null if no more data is available\n
\n
a readFully method, which must return the entire text from the resource,\n or null if no data is available\n
\n
a writeLine method, which must append a line of text to the resource
\n
a writeFully method, which must overwrite the entire content of the resource with\n the incoming text\n
React supports both stateless and controlled components. Controlled components have a state, which is used to control the component. \n To set and access state, React widgets come with 4 methods:
\n
\n
getInitialState \n The getInitialState is an optional callback that is called by React to set a controlled component's initial state. It must return a Document. \n \n
\n\n
getState \n This method returns the current state of the controlled component, in the form of a Document. \n Alternately, you can use the built-in state widget field. \n \n
\n\n
setState \n This method sets the new state of the controlled component, in the form of a Document. \n (continuation is not supported yet, but is coming soon). \n \n
Here is an example where the 3 common methods are used.
\n \n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Properties\");\n }\n\n renderContent(topicSelected) {\n return <>\n
React widget properties
\n
React components often require properties in order to render meaningful content. \n Properties are often referred to as props in React literature. \n Properties are provided to the widget through attributes set on the Html tag.
\n
To access properties, React widgets come with 1 method:
\n
\n
getProperties \n The getProperties is a method that can be called from widget code. It returns a Document. \n Alternately, you can use the built-in props widget field.\n
\n
\n
In the below example, we create a Minimal widget, which renders a title dynamically. \n In the Page widget, we set the title value, and pass it as a property to the Minimal widget.
\n \n
(there are plans to support the props field directly, but as of now, you need to call getProperties.
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Lifecycle\");\n }\n\n renderContent(topicSelected) {\n return <>\n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Rendering\");\n }\n\n renderContent(topicSelected) {\n return <>\n
React widget rendering
\n
As described in the introduction, React components follow a specific lifecycle, centered around rendering. \n React widgets provides the following lifecycle methods:
\n
\n
shouldComponentUpdate \n The shouldComponentUpdate method is a callback invoked before rendering, which is useful to force update as part of next event loop iteration. \n You should rarely need to implement this callback method. \n \n
\n
render \n The render method is a callback method invoked by the React engine to render a widget. \n The render method is mandatory for visible widgets. \n You cannot call render method from another piece of code, this could result in a duplicated UI. \n \n
\n
getSnapshotBeforeUpdate \n The getSnapshotBeforeUpdate method is a callback method invoked immediately after rendering, to give an opportunity to record a component's latest state (such as scroll position, caret...) \n You should rarely need to implement this callback method. \n \n
\n
componentDidUpdate \n The componentDidUpdate method is a callback method invoked immediately after rendering, to give an opportunity to perfom housekeeping activities. \n It is not frequent to implement this callback method. \n \n
\n
componentWillUnmount \n The componentDidUpdate method is the last callback method that is invoked before a widget is discarded. \n It is not frequent to implement this callback method. \n \n
\n
forceUpdate \n The forceUpdate method is a method that can be called to force refresh of a widget following a change not tracked through state or properties. \n You should rarely need to call this method. \n
\n
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport ReactState from \"./ReactState\";\nimport ReactProperties from \"./ReactProperties\";\nimport ReactLifecycle from \"./ReactLifecycle\";\nimport ReactRendering from \"./ReactRendering\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"React widgets\", [ ReactLifecycle, ReactState, ReactProperties, ReactRendering ]);\n }\n\n renderContent(topicSelected) {\n return <>\n
React widgets
\n
A React widget is a widget to be used with the React rendering engine. \n It must extend the ReactWidget class. Here is a minimal example:
\n \n \n
At minimal, a React widget must provide a render method. This method does not take parameters, and must return valid Html.
\n
Derived widget
\n
Additionally, a React widget can extend an existing React widget. Here is an example:
\n \n (note that the Derived widget is not required to implement a render method, since it is already provided by the Minimal widget)\n \n
React widget fields: state and props
\n
React widget methods can directly access the built-in props field. \n If the widget is a controlled component (if getInitialState returns a Document), then React widget methods can directly access the built-in state field.\n
\n
Documentation
\n
Prompto React widgets make React programming directly available in Prompto. \n The code is 100% compatible with javascript React programming, which ensures ease of adoption (and migration). \n We do not provide a thorough documentation of React programming, only the minimal required to get started.
\n Prompto uses React v16.x\n
Disclaimer
\n
React widgets are easy to use once important concepts such as component lifecycle and rendering workflow are fully understood. \n You are therefore strongly encouraged to read (multiple times) the reference documentation for React components.
\n\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"React modals\");\n }\n\n renderContent(topicSelected) {\n return <>\n
React modals
\n
Because it is reactive to state and props rather than premptive, React makes it somewhat difficult to display transient widgets that are not embedded in the layout, such as modal dialogs. \n To help display such widgets, Prompto comes with 4 useful methods:
\n
\n
showReactModal(Html modal) \n The showReactModal is a method that can be called from widget code. It accepts Html. \n
\n
hideReactModal() \n The hideReactModal is a method that can be called from widget code. It takes no parameter. \n
\n
showReactContextMenu(ClickEvent event, Html menu) \n The showReactContextMenu is a method that can be called from widget code. It accepts a ClickEvent and Html. \n
\n
hideReactContextMenu() \n The hideReactContextMenu is a method that can be called from widget code. It takes no parameter. \n You usually do not need to call this method because the context menu is closed automatically on the next click. \n
\n
\n
In the below example, when clicking on a button, a Modal is displayed. \n The Modal itself has a button to close the modal.
\n \n \n
It is worth noting that these methods affect the html rendering of the widget, but the widget itself might require additional properties to be visible. \n For example React Bootstrap 3 modals require a show property to be set (see above example).\n
\n
Also worth noting, the showReactModal is not blocking. It prepares rendering for the next React cycle and returns before the modal is actually displayed. \n This also applies to hideReactModal, showReactContextMenu and hideReactContextMenu.\n
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport ReactWidget from \"./ReactWidget\";\nimport ReactModal from \"./ReactModal\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Widgets\", [ReactWidget, ReactModal]);\n }\n\n renderContent(topicSelected) {\n return <>\n
Widgets
\n\n
Prompto supports Widgets, a special type designed to render user interface.
\n
A widget is rendered by a rendering engine. \n A rendering engine can be browser based (React, Vue, Angular...), or more specialized (Cocoa Touch,\n Android UI ...). \n Here is a non exhaustive list of rendering engines:
\n
\n
Browser engines: \n
\n
React
\n
Vue
\n
Ember
\n
Angular
\n
\n (the above can also be used by Electron)\n
\n
iOS engines:\n
\n
Cocoa Touch
\n
React Native
\n
\n
\n
Android engines:\n
\n
Android SDK
\n
React Native
\n
\n
\n
MacOSX engines:\n
\n
Cocoa
\n
\n
\n
Windows engines:\n
UWP
\n
WPF
\n
Windows Forms
\n
\n
\n\n
As of writing, Prompto only supports the React rendering engine.
\n\n
Prompto widgets are not usable across rendering engines. This is unfortunate, but the lack of\n standardization in this space simply makes it impossible. \n You must therefore decide which engine to use when coding, this cannot be changed by configuration.
\n
Due to the above, a widget must extend the base widget type of the selected\n rendering engine, and providing the methods required by the base widget.
\n\n
Rendering occurs when a top most widget (such as a web page) is displayed. \n At that point, the engine obtains the contents to display from the widget. \n For example, the React engine will call the render method of the page widget (which must\n return Html). \n From there, if the returned Html contains widgets, they will in turn be rendered.
\n
A widget cannot be instantiated in code i.e. you cannot write:
\n
w = MyWidget()
\n
Rather, widgets are instantiated by the rendering engine, when the UI is rendered.
\n\n
Derived widgets
\n
Prompto fully supports derived widgets i.e. a widget extending an existing one. \n However multiple inheritance is not supported. Rather, you are encouraged to use composition, which\n we find also works better for UI rendering.
\n
Widget attributes
\n
As of writing, widgets cannot have attributes. This is planned but not available yet. \n (reason for this is we are hesitant on how they would be initialized)\n
\n
Widget storage
\n
Widgets cannot be stored. They are for UI only.
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"ClickEvent\");\n }\n\n renderContent(topicSelected) {\n return <>\n
ClickEvent
\n
As its name indicates, a ClickEvent is generated when the user clicks on a widget or html element. \n The event is generated when the user releases the mouse, not when he/she presses it.
\n
As of writing, a ClickEvent has no specific method
\n
In the below example, we install a click handler on a <div> element:
\n \n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"InputChangedEvent\");\n }\n\n renderContent(topicSelected) {\n return <>\n
InputChangedEvent
\n
As its name indicates, an InputChangedEvent is generated when the user types or deletes text from an input. \n The event is generated when the user releases the keyboard key, not when he/she presses it.
\n
The InputChangedEvent provides the following methods:
\n
\n
getProposedText \n This method returns a Text, which is set to the new value immediately after typing. \n At this point it is possible to reject the input, by resetting the input Text to its current value.
\n
getCurrentText \n This method returns a Text, which is set to the input value before new Text was typed or deleted. \n This method is useful to analyze the change in a stateless fashion.\n
\n
\n
In the below example, we capture each InputChangedEvent, and apply business rules:
\n \n
(the above Input widget is a fictitious one, not the html tag. See ReactBootstrap for a real example)
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"RadioChangedEvent\");\n }\n\n renderContent(topicSelected) {\n return <>\n
RadioChangedEvent
\n
As its name indicates, a RadioChangedEvent is generated when the user selects a radio button. \n The event is generated when the user releases the mouse, not when he/she presses it.
\n
The RadioChangedEvent provides the following methods:
\n
\n
getSelectedRadio \n This method returns a Text, which is set to the id attribute of the newly selected radio button.
\n
\n
In the below example, we capture each RadioChangedEvent, and apply business rules:
\n \n
(the above Radio widget is a fictitious one. See ReactBootstrap for a real example)
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport ClickEvent from \"./ClickEvent\";\nimport InputChangedEvent from \"./InputChangedEvent\";\nimport RadioChangedEvent from \"./RadioChangedEvent\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Events\", [ ClickEvent, InputChangedEvent, RadioChangedEvent ]);\n }\n\n renderContent(topicSelected) {\n return <>\n
Events
\n
Displaying a UI using widgets would have limited usage if users could not interact with it. \n Each time a user clicks, moves the mouse or inputs text, an Event is generated by the operating system. \n That event is in turn converted into a high level event by the host software (browser or other UI). \n Applications need to install event handlers in order to receive these events and act accordingly.\n
\n
In the below example, we install a click handler on a <div> element:
\n \n \n
Prompto supports the following events:
\n
\n
ClickEvent
\n
InputChangedEvent
\n
RadioChangedEvent
\n
\n
(this is work in progress, expect the list of supported events to evolve rapidly.
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Workers\");\n }\n\n renderContent(topicSelected) {\n return <>\n
Workers
\n\n
Under construction
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Topic from \"../../../content/Topic\";\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Methods\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Binding global methods
\n
Binding global methods is done as follows:
\n\n \n\n
Notice the native keyword in the method definition. This denotes a native binding method.\n
\n
The method body must then comprise exactly 1 binding statement per\n supported host language. The statement must be a single one (list of statements separated by ';' is not\n supported).
\n
When a native method is executed, Prompto converts the parameter values from Prompto types to\n their equivalent native type.\n It then looks for the native statement matching the host language, and executes it. If the statement is\n an expression or function call\n returning a value, it converts that value from its native type to the corresponding Prompto type.
\n
If a native method returns a value, the return type must be specified. This is because\n Python and JavaScript have no support\n for static typing, thus preventing Prompto from inferring the return type.
\n\n
Binding methods with Java methods
\n
Binding methods with Java methods is done by using the Java: keyword, followed by a Java\n statement, ending with a semicolon.
\n
If the Java statement is a method call, that method must be static.
\n
The method must be preceded by the fully qualified class name i.e. including full package, except\n for java.lang package.
\n
Java: return prompto.internet.Html.encode(value);
\n
If the Prompto method must return a value, the Java statement must start with\n the return keyword.
\n\n
Binding methods with C# methods
\n
Binding methods with C# methods is done by using the C#: keyword, followed by a C#\n statement, ending with a semicolon.
\n
If the C# statement is a method call, that method must be static.
\n
The method must be preceded by the fully qualified class name i.e. including namespace.
If the Prompto method must return a value, the C# statement must start with\n the return keyword.
\n\n
Binding methods with Python 2 functions
\n
Binding methods with Python 2 functions is done by using the Python2: keyword, followed by a\n Python 2 statement.
\n
If the Python 2 statement refers to a method or variable which does not belong to the global namespace,\n the import module must be provided, as follows:
\n
Python2: return escape(value) from module: cgi
\n
If the Prompto method must return a value, the Python statement must start with\n the return keyword.
\n\n
Binding methods with Python 3 functions
\n
Binding methods with Python 3 functions is done by using the Python2: keyword, followed by a\n Python 3 statement.
\n
If the Python 3 statement refers to a method or variable which does not belong to the global namespace,\n the import module must be provided, as follows:
\n
Python2: return escape(value) from module: html
\n
If the Prompto method must return a value, the Python statement must start with\n the return keyword.
\n\n\n
Binding methods with JavaScript functions
\n
Binding methods with JavaScript functions is done by using the {String.raw`JavaScript:`} keyword, followed\n by a JavaScript statement, ending with a semicolon.
\n
If the JavaScript is a method or variable which does not belong to the global namespace, the import\n module must be provided, as follows:
\n
{String.raw`JavaScript: return Encoder.htmlEncode(value); from module: prompto/internet/Html.js`}
\n
If the Prompto method must return a value, the JavaScript statement must start with\n the return keyword.
\n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport PromptoPlayer from \"../../../player/PromptoPlayer\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Categories\");\n }\n\n renderContent(topicSelected) {\n return <>\n\n
Binding categories
\n\n
Prompto can expose native objects, and interact with them, as if they were Prompto objects.\n This is acheved using Prompto native categories. Native categories have a lot in common with\n regular Prompto categories,\n with the following exceptions:\n
\n
They cannot inherit from other categories
\n
They cannot be enumerated
\n
They only support native methods
\n
They may have no attribute
\n
\n \n
Binding categories
\n
The first step in binding categories is to bind the Prompto category itself to an host language\n equivalent.\n Binding categories is done as follows:
\n \n\n
Notice the native keyword in the category definition. This denotes a binding category.
\n
The category body must comprise exactly 1 category binding statement, which must itself comprise exactly\n 1 binding statement per\n supported host language.
\n\n
Binding a category with a Java class
\n
Binding a category with a Java class is done by using the Java: keyword, followed by a Java\n full class name.
\n
The class must have a public parameter-less constructor.
\n
Java: java.io.PrintStream
\n\n
Binding a category with a C# class
\n
Binding a category with a C# class is done by using the C#: keyword, followed by a C# full\n class name.
\n
The class must have a public parameter-less constructor.
\n
C#: System.IO.TextWriter
\n\n
Binding a category with a Python 2 class
\n
Binding a category with a Python 2 class is done by using the Python2: keyword, followed by\n a Python 2 class name.
\n
If the Python 2 statement refers to a class which does not belong to the global namespace,\n the import module must be provided.
\n
Python2: StringIO from module: StringIO
\n\n
Binding a category with a Python 3 class
\n
Binding a category with a Python 3 class is done by using the Python2: keyword, followed by\n a Python 3 class name.
\n
If the Python 3 statement refers to a class which does not belong to the global namespace,\n the import module must be provided.
\n
Python3: StringIO from module: io
\n\n\n
Binding a category with a JavaScript function
\n
Binding a category with a JavaScript function is done by using the {String.raw`JavaScript:`} keyword,\n followed by a JavaScript function name.
\n
The JavaScript function must have a prototype, and the constructor must return this.
\n
If the JavaScript is a method or variable which does not belong to the global namespace, the import\n module must be provided.
\n
{String.raw`JavaScript: writer from module: prompto/io/io.js`}
\n\n
Binding attributes
\n
Prompto automatically binds category attributes, if any, to their corresponding host language equivalent.\n This may require providing a \"proxy\" class in the host language which maps Prompto attribute names to\n actual names.\n Alternately, attribute name bridging can be achieved using native getters and setters.
\n
The below is an example of using a getter to bind a virtual attribute:
\n \n\n
Binding methods
\n\n
Prompto native categories can have methods, like regular Prompto categories, these methods simply need to\n be native.
\n
Prompto native category methods share a lot with Prompto native global methods. The only difference is\n they can make use of this or self,\n which both represent the native instance in all host languages.
\n\n
Here is an example:
\n \n\n >;\n }\n\n}\n\nexport default new ThisTopic();","import React from 'react';\nimport Methods from \"./Methods\";\nimport Categories from \"./Categories\";\nimport Topic from \"../../../content/Topic\";\n\nclass ThisTopic extends Topic {\n\n constructor() {\n super(\"Bindings\", [ Methods, Categories ]);\n }\n\n renderContent(topicSelected) {\n return <>\n
Native bindings
\n\n
Prompto does not compile to machine code that can be executed by a processor. \n Instead, it leverages existing programming languages to focus on business logic, and ensure maximum interoperability across platforms.\n
\n\n
Native binding is the mechanism used by Prompto to communicate with the host language, and with the underlying operating system.
\n\n
To achieve this, Prompto binds methods and categories to\n their equivalent in the host language. This chapter describes this mechanism.
\n >;\n }\n\n}\n\nexport default new ThisTopic();","import { Search, StopWordsMap, StopWordsTokenizer, SimpleTokenizer } from 'js-search';\nimport asap from 'asap';\n\nconst HTML_TAGS = new Set([\"\", \"\", \"\", \"\", \"\", \"