About Monkey 2 › Forums › Monkey 2 Programming Help › Best Practice: Class vs Struct and Array vs List
Tagged: bestPractice
This topic contains 5 replies, has 4 voices, and was last updated by
Anatol
1 year, 6 months ago.
-
AuthorPosts
-
October 1, 2017 at 1:52 pm #10907
Hi,
this is a question for the seasoned Monkey2 coders. I’m a bit confused as to what type makes the most sense. If I take this example:
Monkey12345678910111213141516171819202122232425262728293031Class ControlField Name:StringField Trigger:Bool()Field Callback:Void()EndClass ControlManagerField Controls := New Control[ 0 ]Method Add ( name:String, trigger:Bool(), callback:Void() )Local control := New Control()control.Name = namecontrol.Trigger = triggercontrol.Callback = callbackControls = Controls.Resize( Controls.Length + 1 )Controls[ Controls.Length - 1 ] = controlEndMethod OnUpdate ()For Local control := Eachin ControlsIf control.Trigger()control.Callback()EndNextEndEndAt first the control Class at the top was a Struct, and both Struct or Class work fine, but I’m wondering which is the better option.
The documentation says:
“A struct is a ‘value type’, whereas a class is a ‘reference type’. This means that when you assign a struct to a variable, pass a struct to a function or return a struct from a function, the entire struct is copied in the process.”
I’d think that generally (or at least in the code above) a reference type is the better option, but I’m not sure if that’s the right conclusion.
The other question is about Arrays vs Lists. I guess Arrays are somewhat leaner, but with a list I could just do a
Monkey1myList.Add( newItem )instead of this whole
Monkey12myArray = myArray.Resize( myArray.Length + 1 )myArray[ myArray.Length - 1 ] = newItemWhat’s the better choice if that can even be generalised? Thanks!
October 1, 2017 at 11:52 pm #10919Hi,
I recommend Stack<T> as a good general purpose container. It behaves very much like an array you can add things too, eg:
Monkey123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926<!doctype html><!--[if !IE]><html class="no-js non-ie" lang="en-US" prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#"> <![endif]--><!--[if IE 7 ]><html class="no-js ie7" lang="en-US" prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#"> <![endif]--><!--[if IE 8 ]><html class="no-js ie8" lang="en-US" prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#"> <![endif]--><!--[if IE 9 ]><html class="no-js ie9" lang="en-US" prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#"> <![endif]--><!--[if gt IE 9]><!--><html class="no-js" lang="en-US" prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#"> <!--<![endif]--><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#d6d6d6"><link rel="profile" href="http://gmpg.org/xfn/11"><title>Monkey 2 – Create cross-platform apps and games in 2D+3D</title><script type='text/javascript'>function ctSetCookie(c_name, value, def_value){document.cookie = c_name + '=' + escape(value) + '; path=/';}ctSetCookie('ct_checkjs', '2003912746', '0');</script><link rel='dns-prefetch' href='//fonts.googleapis.com' /><link rel='dns-prefetch' href='//s.w.org' /><link rel="alternate" type="application/rss+xml" title="Monkey 2 » Feed" href="http://monkeycoder.co.nz/feed/" /><link rel="alternate" type="application/rss+xml" title="Monkey 2 » Comments Feed" href="http://monkeycoder.co.nz/comments/feed/" /><script type="text/javascript">window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/11.2.0\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/11.2.0\/svg\/","svgExt":".svg","source":{"concatemoji":"http:\/\/monkeycoder.co.nz\/wp-includes\/js\/wp-emoji-release.min.js?ver=5.1.1"}};!function(a,b,c){function d(a,b){var c=String.fromCharCode;l.clearRect(0,0,k.width,k.height),l.fillText(c.apply(this,a),0,0);var d=k.toDataURL();l.clearRect(0,0,k.width,k.height),l.fillText(c.apply(this,b),0,0);var e=k.toDataURL();return d===e}function e(a){var b;if(!l||!l.fillText)return!1;switch(l.textBaseline="top",l.font="600 32px Arial",a){case"flag":return!(b=d([55356,56826,55356,56819],[55356,56826,8203,55356,56819]))&&(b=d([55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447],[55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447]),!b);case"emoji":return b=d([55358,56760,9792,65039],[55358,56760,8203,9792,65039]),!b}return!1}function f(a){var c=b.createElement("script");c.src=a,c.defer=c.type="text/javascript",b.getElementsByTagName("head")[0].appendChild(c)}var g,h,i,j,k=b.createElement("canvas"),l=k.getContext&&k.getContext("2d");for(j=Array("flag","emoji"),c.supports={everything:!0,everythingExceptFlag:!0},i=0;i<j.length;i++)c.supports[j[i]]=e(j[i]),c.supports.everything=c.supports.everything&&c.supports[j[i]],"flag"!==j[i]&&(c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&c.supports[j[i]]);c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&!c.supports.flag,c.DOMReady=!1,c.readyCallback=function(){c.DOMReady=!0},c.supports.everything||(h=function(){c.readyCallback()},b.addEventListener?(b.addEventListener("DOMContentLoaded",h,!1),a.addEventListener("load",h,!1)):(a.attachEvent("onload",h),b.attachEvent("onreadystatechange",function(){"complete"===b.readyState&&c.readyCallback()})),g=c.source||{},g.concatemoji?f(g.concatemoji):g.wpemoji&&g.twemoji&&(f(g.twemoji),f(g.wpemoji)))}(window,document,window._wpemojiSettings);</script><style type="text/css">img.wp-smiley,img.emoji {display: inline !important;border: none !important;box-shadow: none !important;height: 1em !important;width: 1em !important;margin: 0 .07em !important;vertical-align: -0.1em !important;background: none !important;padding: 0 !important;}</style><link rel='stylesheet' id='crayon-css' href='http://monkeycoder.co.nz/wp-content/plugins/crayon-syntax-highlighter/css/min/crayon.min.css?ver=_2.7.2_beta' type='text/css' media='all' /><link rel='stylesheet' id='crayon-theme-tomorrow-night-copy-css' href='http://monkeycoder.co.nz/wp-content/uploads/crayon-syntax-highlighter/themes/tomorrow-night-copy/tomorrow-night-copy.css?ver=_2.7.2_beta' type='text/css' media='all' /><link rel='stylesheet' id='crayon-font-sourcecodepro-css' href='http://monkeycoder.co.nz/wp-content/plugins/crayon-syntax-highlighter/fonts/sourcecodepro.css?ver=_2.7.2_beta' type='text/css' media='all' /><link rel='stylesheet' id='wp-block-library-css' href='http://monkeycoder.co.nz/wp-includes/css/dist/block-library/style.min.css?ver=5.1.1' type='text/css' media='all' /><link rel='stylesheet' id='bbp-default-css' href='http://monkeycoder.co.nz/wp-content/plugins/bbpress/templates/default/css/bbpress.css?ver=2.5.14-6684' type='text/css' media='screen' /><link rel='stylesheet' id='fancybox-css' href='http://monkeycoder.co.nz/wp-content/plugins/fancybox-for-wordpress/assets/css/fancybox.css?ver=1.3.4' type='text/css' media='all' /><link rel='stylesheet' id='hm_bbpui-css' href='http://monkeycoder.co.nz/wp-content/plugins/image-upload-for-bbpress/css/bbp-image-upload.css?ver=5.1.1' type='text/css' media='all' /><link rel='stylesheet' id='simple-banner-style-css' href='http://monkeycoder.co.nz/wp-content/plugins/simple-banner/simple-banner.css?ver=5.1.1' type='text/css' media='all' /><link rel='stylesheet' id='theme-my-login-css' href='http://monkeycoder.co.nz/wp-content/plugins/theme-my-login/assets/styles/theme-my-login.min.css?ver=7.0.13' type='text/css' media='all' /><link rel='stylesheet' id='bb-tcs-editor-style-shared-css' href='http://monkeycoder.co.nz/wp-content/themes/sparkling/editor-style-shared.css?ver=5.1.1' type='text/css' media='all' /><link rel='stylesheet' id='wp-ulike-css' href='http://monkeycoder.co.nz/wp-content/plugins/wp-ulike/assets/css/wp-ulike.min.css?ver=3.6.0' type='text/css' media='all' /><link rel='stylesheet' id='bsp-css' href='http://monkeycoder.co.nz/wp-content/plugins/bbp-style-pack/css/bspstyle.css?ver=4.1.10' type='text/css' media='screen' /><link rel='stylesheet' id='dashicons-css' href='http://monkeycoder.co.nz/wp-includes/css/dashicons.min.css?ver=5.1.1' type='text/css' media='all' /><link rel='stylesheet' id='sparkling-bootstrap-css' href='http://monkeycoder.co.nz/wp-content/themes/sparkling/assets/css/bootstrap.min.css?ver=5.1.1' type='text/css' media='all' /><link rel='stylesheet' id='sparkling-icons-css' href='http://monkeycoder.co.nz/wp-content/themes/sparkling/assets/css/fontawesome-all.min.css?ver=5.1.1.' type='text/css' media='all' /><link rel='stylesheet' id='sparkling-fonts-css' href='//fonts.googleapis.com/css?family=Open+Sans%3A400italic%2C400%2C600%2C700%7CRoboto+Slab%3A400%2C300%2C700&ver=5.1.1' type='text/css' media='all' /><link rel='stylesheet' id='flexslider-css-css' href='http://monkeycoder.co.nz/wp-content/themes/sparkling/assets/css/flexslider.css?ver=5.1.1' type='text/css' media='all' /><link rel='stylesheet' id='parent-style-css' href='http://monkeycoder.co.nz/wp-content/themes/sparkling/style.css?ver=5.1.1' type='text/css' media='all' /><link rel='stylesheet' id='child-style-css' href='http://monkeycoder.co.nz/wp-content/themes/sparkling-monkey2/style.css?ver=5.1.1' type='text/css' media='all' /><script type='text/javascript' src='http://monkeycoder.co.nz/wp-includes/js/jquery/jquery.js?ver=1.12.4'></script><script type='text/javascript' src='http://monkeycoder.co.nz/wp-includes/js/jquery/jquery-migrate.min.js?ver=1.4.1'></script><script type='text/javascript'>/* <![CDATA[ */var quicktagsL10n = {"closeAllOpenTags":"Close all open tags","closeTags":"close tags","enterURL":"Enter the URL","enterImageURL":"Enter the URL of the image","enterImageDescription":"Enter a description of the image","textdirection":"text direction","toggleTextdirection":"Toggle Editor Text Direction","dfw":"Distraction-free writing mode","strong":"Bold","strongClose":"Close bold tag","em":"Italic","emClose":"Close italic tag","link":"Insert link","blockquote":"Blockquote","blockquoteClose":"Close blockquote tag","del":"Deleted text (strikethrough)","delClose":"Close deleted text tag","ins":"Inserted text","insClose":"Close inserted text tag","image":"Insert image","ul":"Bulleted list","ulClose":"Close bulleted list tag","ol":"Numbered list","olClose":"Close numbered list tag","li":"List item","liClose":"Close list item tag","code":"Code","codeClose":"Close code tag","more":"Insert Read More tag"};/* ]]> */</script><script type='text/javascript' src='http://monkeycoder.co.nz/wp-includes/js/quicktags.min.js?ver=5.1.1'></script><script type='text/javascript'>/* <![CDATA[ */var CrayonSyntaxSettings = {"version":"_2.7.2_beta","is_admin":"0","ajaxurl":"http:\/\/monkeycoder.co.nz\/wp-admin\/admin-ajax.php","prefix":"crayon-","setting":"crayon-setting","selected":"crayon-setting-selected","changed":"crayon-setting-changed","special":"crayon-setting-special","orig_value":"data-orig-value","debug":""};var CrayonSyntaxStrings = {"copy":"Press %s to Copy, %s to Paste","minimize":"Click To Expand Code"};var CrayonTagEditorSettings = {"home_url":"http:\/\/monkeycoder.co.nz","css":"crayon-te","css_selected":"crayon-selected","code_css":"#crayon-code","url_css":"#crayon-url","url_info_css":"#crayon-te-url-info","lang_css":"#crayon-lang","title_css":"#crayon-title","mark_css":"#crayon-mark","range_css":"#crayon-range","inline_css":"crayon-inline","inline_hide_css":"crayon-hide-inline","inline_hide_only_css":"crayon-hide-inline-only","hl_css":"#crayon-highlight","switch_html":"#content-html","switch_tmce":"#content-tmce","tinymce_button_generic":".mce-btn","tinymce_button":"a.mce_crayon_tinymce,.mce-i-crayon_tinymce","tinymce_button_unique":"mce_crayon_tinymce","tinymce_highlight":"mce-active","submit_css":"#crayon-te-ok","cancel_css":"#crayon-te-cancel","content_css":"#crayon-te-content","dialog_title_css":"#crayon-te-title","submit_wrapper_css":"#crayon-te-submit-wrapper","data_value":"data-value","attr_sep":":","css_sep":"_","fallback_lang":"monkey","add_text":"Add Code","edit_text":"Edit Code","quicktag_text":"Insert Code","submit_add":"Add","submit_edit":"Save","bar":"#crayon-te-bar","bar_content":"#crayon-te-bar-content","extensions":{"scpt":"applescript","applescript":"applescript","swf":"as","fla":"as","cs":"c#","h":"c++","hh":"c++","hpp":"c++","hxx":"c++","h++":"c++","cc":"c++","cpp":"c++","cxx":"c++","c++":"c++","pas":"delphi","java":"java","class":"java","jar":"java","mel":"mel","ma":"mel","mv":"miva","mvc":"miva","mvt":"miva","m":"objc","mm":"objc","psc":"papyrus","pl":"perl","py":"python","pyw":"python","pyc":"python","pyo":"python","pyd":"python","rb":"ruby","rbx":"ruby","rhtml":"ruby","vbs":"vb"}};var CrayonSyntaxSettings = {"version":"_2.7.2_beta","is_admin":"0","ajaxurl":"http:\/\/monkeycoder.co.nz\/wp-admin\/admin-ajax.php","prefix":"crayon-","setting":"crayon-setting","selected":"crayon-setting-selected","changed":"crayon-setting-changed","special":"crayon-setting-special","orig_value":"data-orig-value","debug":""};var CrayonSyntaxStrings = {"copy":"Press %s to Copy, %s to Paste","minimize":"Click To Expand Code"};/* ]]> */</script><script type='text/javascript' src='http://monkeycoder.co.nz/wp-content/plugins/crayon-syntax-highlighter/js/min/crayon.te.min.js?ver=_2.7.2_beta'></script><script type='text/javascript'>/* <![CDATA[ */var ctPublic = {"_ajax_nonce":"de98041bb7","_ajax_url":"http:\/\/monkeycoder.co.nz\/wp-admin\/admin-ajax.php"};/* ]]> */</script><script type='text/javascript' src='http://monkeycoder.co.nz/wp-content/plugins/cleantalk-spam-protect/js/apbct-public.js?ver=5.117.1'></script><script type='text/javascript'>/* <![CDATA[ */var ctNocache = {"ajaxurl":"http:\/\/monkeycoder.co.nz\/wp-admin\/admin-ajax.php","info_flag":"","set_cookies_flag":"","blog_home":"http:\/\/monkeycoder.co.nz\/"};/* ]]> */</script><script type='text/javascript' src='http://monkeycoder.co.nz/wp-content/plugins/cleantalk-spam-protect/inc/cleantalk_nocache.js?ver=5.117.1'></script><script type='text/javascript' src='http://monkeycoder.co.nz/wp-content/plugins/fancybox-for-wordpress/assets/js/jquery.fancybox.js?ver=1.3.4'></script><script type='text/javascript' src='http://monkeycoder.co.nz/wp-content/plugins/image-upload-for-bbpress/js/bbp-image-upload.js?ver=5.1.1'></script><script type='text/javascript' src='http://monkeycoder.co.nz/wp-content/plugins/simple-banner/simple-banner.js?ver=5.1.1'></script><script type='text/javascript' src='http://monkeycoder.co.nz/wp-content/themes/sparkling/assets/js/vendor/bootstrap.min.js?ver=5.1.1'></script><script type='text/javascript' src='http://monkeycoder.co.nz/wp-content/themes/sparkling/assets/js/functions.js?ver=20180503'></script><link rel='https://api.w.org/' href='http://monkeycoder.co.nz/wp-json/' /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://monkeycoder.co.nz/xmlrpc.php?rsd" /><link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://monkeycoder.co.nz/wp-includes/wlwmanifest.xml" /><meta name="generator" content="WordPress 5.1.1" /><link rel="canonical" href="http://monkeycoder.co.nz/" /><link rel='shortlink' href='http://monkeycoder.co.nz/' /><link rel="alternate" type="application/json+oembed" href="http://monkeycoder.co.nz/wp-json/oembed/1.0/embed?url=http%3A%2F%2Fmonkeycoder.co.nz%2F" /><link rel="alternate" type="text/xml+oembed" href="http://monkeycoder.co.nz/wp-json/oembed/1.0/embed?url=http%3A%2F%2Fmonkeycoder.co.nz%2F&format=xml" /><!-- Fancybox for WordPress v3.2.0 --><style type="text/css">div.fancybox-caption{display:none !important;}img.fancybox-image{border-width:10px;border-color:#FFFFFF;border-style:solid;height:auto;}div.fancybox-bg{background-color:rgba(102,102,102,0.3);opacity:1 !important;}div.fancybox-content{border-color:#FFFFFF}div#fancybox-title{background-color:#FFFFFF}div.fancybox-content{background-color:#FFFFFF}div#fancybox-title-inside{color:#333333}div.fancybox-caption p.caption-title{display:inline-block}div.fancybox-caption p.caption-title{font-size:14px}div.fancybox-caption p.caption-title{color:#333333}div.fancybox-caption {color:#333333}div.fancybox-caption p.caption-title {background:#fff; width:auto;padding:10px 30px;}</style><script type="text/javascript">jQuery(function(){jQuery.fn.getTitle = function() { // Copy the title of every IMG tag and add it to its parent A so that fancybox can show titlesvar arr = jQuery("a[data-fancybox]");jQuery.each(arr, function() {var title = jQuery(this).children("img").attr("title");var caption = jQuery(this).next("figcaption").html();if(caption && title){jQuery(this).attr("title",title+" " + caption)}else if(title){ jQuery(this).attr("title",title);}else if(caption){jQuery(this).attr("title",caption);}}); }// Supported file extensionsvar thumbnails = jQuery("a:has(img)").not(".nolightbox").not('.envira-gallery-link').not('.ngg-simplelightbox').filter(function () {return /\.(jpe?g|png|gif|mp4|webp|bmp|pdf)(\?[^/]*)*$/i.test(jQuery(this).attr('href'))});// Add data-type iframe for links that are not images or videos.var iframeLinks = jQuery('.fancyboxforwp').filter( function() { return ! /\.(jpe?g|png|gif|mp4|webp|bmp|pdf)(\?[^/]*)*$/i.test(jQuery(this).attr('href')) }).filter( function() { return ! /vimeo|youtube/i.test(jQuery(this).attr('href')) });iframeLinks.attr({ "data-type" : "iframe" }).getTitle();// Gallery Allthumbnails.addClass("fancyboxforwp").attr("data-fancybox","gallery").getTitle();iframeLinks.attr({ "data-fancybox":"gallery" }).getTitle();// Gallery type NONE// Call fancybox and apply it on any link with a rel atribute that starts with "fancybox", with the options set on the admin paneljQuery("a.fancyboxforwp").fancyboxforwp({loop: false,smallBtn: true,zoomOpacity: "auto",animationEffect: "fade",animationDuration: 500,transitionEffect: "fade",transitionDuration : "300",overlayShow: true,overlayOpacity: "0.3",titleShow: true,titlePosition: "inside",keyboard: true,showCloseButton: true,arrows: true,clickContent: false,clickSlide: "close",wheel: false,toolbar: true,preventCaptionOverlap: true,onInit: function() { }, onDeactivate: function() { }, beforeClose: function() { }, afterShow: function() { }, afterClose: function() { }, caption : function( instance, item ) {var testing = jQuery(this).context.title;var caption = jQuery(this).data('caption') || '';if ( item.type === 'image' && testing.length ) {caption = (caption.length ? caption + '<br />' : '') + '<p class="caption-title">'+testing+'</p>' ;}return caption;},afterLoad : function( instance, current ) {current.$content.append('<div class=\"fancybox-custom-caption\" style=\" position: absolute;left:0;right:0;color:#000;padding-top:10px;bottom:-50px;margin:0 auto;text-align:center; \">' + current.opts.caption + '</div>');},});})</script><!-- END Fancybox for WordPress --><!-- Plugin: Open external links a new window. Plugin by Kristian Risager Larsen, http://kristianrisagerlarsen.dk . Download it at http://wordpress.org/extend/plugins/open-external-links-in-a-new-window/ --><script type="text/javascript">//<![CDATA[function external_links_in_new_windows_loop() {if (!document.links) {document.links = document.getElementsByTagName('a');}var change_link = false;var force = '';var ignore = '';for (var t=0; t<document.links.length; t++) {var all_links = document.links[t];change_link = false;if(document.links[t].hasAttribute('onClick') == false) {// forced if the address starts with http (or also https), but does not link to the current domainif(all_links.href.search(/^http/) != -1 && all_links.href.search('monkeycoder.co.nz') == -1) {// alert('Changeda '+all_links.href);change_link = true;}if(force != '' && all_links.href.search(force) != -1) {// forced// alert('force '+all_links.href);change_link = true;}if(ignore != '' && all_links.href.search(ignore) != -1) {// alert('ignore '+all_links.href);// ignoredchange_link = false;}if(change_link == true) {// alert('Changed '+all_links.href);document.links[t].setAttribute('onClick', 'javascript:window.open(\''+all_links.href+'\'); return false;');document.links[t].removeAttribute('target');}}}}// Loadfunction external_links_in_new_windows_load(func){var oldonload = window.onload;if (typeof window.onload != 'function'){window.onload = func;} else {window.onload = function(){oldonload();func();}}}external_links_in_new_windows_load(external_links_in_new_windows_loop);//]]></script><style type="text/css" media="screen">.simple-banner{background:#d6d6d6};</style><style type="text/css" media="screen">.simple-banner{/*height:42px;*//* background-image: url("http://monkeycoder.co.nz/wp-content/uploads/2018/11/lights_32.png");*/background-color: #000;};</style><script type="text/javascript">document.addEventListener("DOMContentLoaded", function() {var bannerSpan = document.getElementById("simple-banner");bannerSpan.innerHTML = "<div class=simple-banner-text><span>To get approved for the forums:Visit the Monkey2 Discord channel (via Desktop/App or Web), talk to us and proove you\'re not a spambot! :-)</span></div>"});</script><style type="text/css">.cfa { background-color: #dd4453; } .cfa-button:hover a {color: #dd4453;}.cfa-text { color: #000000;}.cfa-button {border-color: #ffffff; color: #ffffff;}.navbar.navbar-default, .navbar-default .navbar-nav .open .dropdown-menu > li > a {background-color: #d6d6d6;}.navbar-default .navbar-nav > li > a, .navbar-default .navbar-nav.sparkling-mobile-menu > li:hover > a, .navbar-default .navbar-nav.sparkling-mobile-menu > li:hover > .caret, .navbar-default .navbar-nav > li, .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus { color: #000000;}@media (max-width: 767px){ .navbar-default .navbar-nav > li:hover > a, .navbar-default .navbar-nav > li:hover > .caret{ color: #000000!important ;} }body, .entry-content {color:#2d2d2d}</style> <style type="text/css">.navbar > .container .navbar-brand {color: #dadada;}</style><style type="text/css" id="custom-background-css">body.custom-background { background-color: #e0e0e0; }</style><link rel="icon" href="http://monkeycoder.co.nz/wp-content/uploads/2018/01/cropped-512logo-01-32x32.png" sizes="32x32" /><link rel="icon" href="http://monkeycoder.co.nz/wp-content/uploads/2018/01/cropped-512logo-01-192x192.png" sizes="192x192" /><link rel="apple-touch-icon-precomposed" href="http://monkeycoder.co.nz/wp-content/uploads/2018/01/cropped-512logo-01-180x180.png" /><meta name="msapplication-TileImage" content="http://monkeycoder.co.nz/wp-content/uploads/2018/01/cropped-512logo-01-270x270.png" /><style type="text/css" id="wp-custom-css">.blog-item-wrap{background-color:#fff;}#secondary .widget a {color: #555;}.post-inner-content , .well{/*background-color:#f1f1f1;*/}.paypal-donations, .widget_paypal_donations{text-align: center;}blockquote {font-style: italic;color: #4d4d4d;}a:hover, a:active,a:visited,a:focus, #secondary .widget .post-content a:hover, .woocommerce nav.woocommerce-pagination ul li a:focus, .woocommerce nav.woocommerce-pagination ul li a:hover, .woocommerce nav.woocommerce-pagination ul li span.current, #secondary .widget a:hover {color: #DA4453;}a.cfa-button:visited{color:#fff;} </style><!-- START - Open Graph for Facebook, Google+ and Twitter Card Tags 2.2.6 --><!-- Facebook Open Graph --><meta property="og:site_name" content="Monkey 2"/><meta property="og:title" content="About Monkey 2"/><meta property="og:url" content="http://monkeycoder.co.nz/"/><meta property="og:image" content="http://monkeycoder.co.nz/wp-content/uploads/2018/01/monkeysite-1.jpg"/><meta property="og:image:url" content="http://monkeycoder.co.nz/wp-content/uploads/2018/01/monkeysite-1.jpg"/><!-- Google+ / Schema.org --><meta itemprop="name" content="About Monkey 2"/><meta itemprop="headline" content="About Monkey 2"/><meta itemprop="description" content="Monkey2 is a new programming language designed by Mark Sibly"/><meta itemprop="image" content="http://monkeycoder.co.nz/wp-content/uploads/2018/01/monkeysite-1.jpg"/><!-- Twitter Cards --><meta name="twitter:title" content="About Monkey 2"/><meta name="twitter:card" content="summary"/><!-- SEO --><link rel="canonical" href="http://monkeycoder.co.nz/"/><!-- Misc. tags --><!-- is_singular --><!-- END - Open Graph for Facebook, Google+ and Twitter Card Tags 2.2.6 --></head><body class="home page-template-default page page-id-97 custom-background group-blog"><a class="sr-only sr-only-focusable" href="#content">Skip to main content</a><div id="page" class="hfeed site"><header id="masthead" class="site-header" role="banner"><nav class="navbar navbar-default" role="navigation"><div class="container"><div class="row"><div class="site-navigation-inner col-sm-12"><div class="navbar-header"><button type="button" class="btn navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><div id="logo"><a href="http://monkeycoder.co.nz/"><img src="http://monkeycoder.co.nz/wp-content/uploads/2018/01/logo-header16-01.png" height="77" width="349" alt="Monkey 2"/></a></div><!-- end of #logo --></div><div class="collapse navbar-collapse navbar-ex1-collapse"><ul id="menu-main-menu" class="nav navbar-nav"><li id="menu-item-12923" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-97 current_page_item menu-item-12923 active"><a href="http://monkeycoder.co.nz/">Home</a></li><li id="menu-item-12940" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-12940"><a href="http://monkeycoder.co.nz/news/">News</a></li><li id="menu-item-12641" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-12641"><a href="http://monkeycoder.co.nz/monkey2-files/">Download</a></li><li id="menu-item-99" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-99"><a href="http://monkeycoder.co.nz/forums/">Forums</a></li><li id="menu-item-12925" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-12925 dropdown"><a href="http://monkeycoder.co.nz/module-manager/">Modules</a><span class="caret sparkling-dropdown"></span><ul role="menu" class=" dropdown-menu"><li id="menu-item-13139" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-13139"><a href="http://monkeycoder.co.nz/module-manager/">Modules</a></li><li id="menu-item-13589" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-13589"><a href="http://monkeycoder.co.nz/module-manager/user-projects-and-modules/">User projects and Modules links</a></li></ul></li><li id="menu-item-12924" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-12924 dropdown"><a href="http://monkeycoder.co.nz/docs/">Documentation</a><span class="caret sparkling-dropdown"></span><ul role="menu" class=" dropdown-menu"><li id="menu-item-14002" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-14002"><a href="http://turdus.be/monkey2docs/docs/">Monkey online documentation (opens a new window)</a></li><li id="menu-item-14001" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-14001"><a href="http://monkeycoder.co.nz/monkey2-roadmap/">The Monkey 2 TODO List!</a></li><li id="menu-item-14741" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-14741"><a href="http://monkeycoder.co.nz/links/">Links</a></li></ul></li><li id="menu-item-14557" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-14557"><a href="http://monkeycoder.co.nz/tutorials/">Tutorials</a></li><li id="menu-item-12927" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-12927"><a href="http://monkeycoder.co.nz/login/">Log In</a></li></ul></div> </div></div></div></nav><!-- .site-navigation --></header><!-- #masthead --><div id="content" class="site-content"><div class="top-section"><div class="flexslider"><ul class="slides"><li><a href="http://monkeycoder.co.nz/2018/12/30/welcome-back-and-happy-new-year/"><img width="680" height="240" src="http://monkeycoder.co.nz/wp-content/uploads/2017/12/slider_eyes.gif" class="attachment-activello-slider size-activello-slider wp-post-image" alt="" /><div class="flex-caption"><h2 class="entry-title">Welcome back and happy new year!</h2><div class="excerpt">Yeehaa, we’re back! Sorry the site has been down over xmas, but the monkey2 forums were spammed and I just wasn’t in the mood for embarking on an involuntary MySql refresher. I don’t even particularly dislike MySql or anything, I JUST WASN’T FEELING IT. Spammers kindly fuck off forever. All done now though, although I […]</div></div></a></li><li><a href="http://monkeycoder.co.nz/2018/11/11/back-to-the-future/"><img width="680" height="240" src="http://monkeycoder.co.nz/wp-content/uploads/2017/12/slider_eyes.gif" class="attachment-activello-slider size-activello-slider wp-post-image" alt="" /><div class="flex-caption"><h2 class="entry-title">Back to the future!</h2><div class="excerpt">Hello all, I have been thinking a lot lately about where to take monkey2 (and blitz research) next and I have decided to concentrate most of my efforts on a single target. I am very happy with most aspects of monkey2, but one thing I think I seriously misjudged was the cost of using c++ […]</div></div></a></li><li><a href="http://monkeycoder.co.nz/2018/09/16/mid-september-update/"><img width="680" height="240" src="http://monkeycoder.co.nz/wp-content/uploads/2017/12/slider_eyes.gif" class="attachment-activello-slider size-activello-slider wp-post-image" alt="" /><div class="flex-caption"><h2 class="entry-title">Mid-September update!</h2><div class="excerpt">Whoooeeeee, life sure can change big time in just a few months! I am now a 9-5 (well, 7.30-4) c++ programmer working in a team of around 100+ people around the world on a project with millions of lines of code. I work in a large open plan office with about 50+ other people, about […]</div></div></a></li><li><a href="http://monkeycoder.co.nz/2018/07/22/july-2018-update/"><img width="680" height="240" src="http://monkeycoder.co.nz/wp-content/uploads/2017/12/slider_eyes.gif" class="attachment-activello-slider size-activello-slider wp-post-image" alt="" /><div class="flex-caption"><h2 class="entry-title">July 2018 Update!</h2><div class="excerpt">Monkey2 Threads Threads are finally in! I eventually gave up on my fancy ‘Tasks’ idea from the previous worklog update. It’s not a bad idea, but communicating between tasks would have been pretty cumbersome as it effectively involves serialization and that’s never particularly fun. I did actually take it quite far. I had a proof […]</div></div></a></li><li><a href="http://monkeycoder.co.nz/2018/06/13/monkey2-update-for-june/"><img width="680" height="240" src="http://monkeycoder.co.nz/wp-content/uploads/2017/12/slider_eyes.gif" class="attachment-activello-slider size-activello-slider wp-post-image" alt="" /><div class="flex-caption"><h2 class="entry-title">Monkey2 Update for June</h2><div class="excerpt">Hi everyone, It’s mainly been a month of tweaking and tooling around, but there have been a few semi-major developments along the way. For starters, weak references have been added to the language via the new WeakRef class. It’s taken a while to add these as I honestly wasn’t that clear on how to implement […]</div></div></a></li><li><a href="http://monkeycoder.co.nz/2018/05/06/monthly-monkey2-update-for-may-2018/"><img width="680" height="240" src="http://monkeycoder.co.nz/wp-content/uploads/2017/12/slider_eyes.gif" class="attachment-activello-slider size-activello-slider wp-post-image" alt="" /><div class="flex-caption"><h2 class="entry-title">Monthly Monkey2 update for May 2018</h2><div class="excerpt">Hello everyone!I have mainly been playing with 3d over the last month. The shader system is now much tidier, thanks to the addition of a pseudo ‘import’ directive (glsl doesn’t have one so you need to roll your own) that should make writing shaders much cleaner/easier. For example, the default PbrMaterial shader is now only […]</div></div></a></li><li><a href="http://monkeycoder.co.nz/2018/04/13/april-2018-monthly-ish-update/"><img width="680" height="240" src="http://monkeycoder.co.nz/wp-content/uploads/2017/12/slider_eyes.gif" class="attachment-activello-slider size-activello-slider wp-post-image" alt="" /><div class="flex-caption"><h2 class="entry-title">April 2018 Monthly-ish update!</h2><div class="excerpt">Hey ho mighty Patreon supporters and assorted lesser beings, OK, monkey2 version 2018.04 is out! Again, this pre-built release is for patreon supporters only but you can pretty easily build it yourself from source. As always, if you’ve donated to the monkey2 cause via the itch.io page (or otherwise), feel free to contact me for […]</div></div></a></li><li><a href="http://monkeycoder.co.nz/2018/03/12/monthlyish-monkey-update/"><img width="680" height="240" src="http://monkeycoder.co.nz/wp-content/uploads/2017/12/slider_eyes.gif" class="attachment-activello-slider size-activello-slider wp-post-image" alt="" /><div class="flex-caption"><h2 class="entry-title">March Monthly(ish) Monkey Update!</h2><div class="excerpt">Hello all! Well, Februrary turned out to be a bit of a ‘low throughput’ month sorry. It kind of turned into a ‘research’ month as I started a few things but ended up filing them under ‘later’ as they were obviously going to take considerably more planning and thought than I had originally envisioned. Still, […]</div></div></a></li></ul> </div> <div class="cfa"><div class="container"><div class="col-sm-8"><span class="cfa-text">Prebuilt binaries at itch.io are now ver. 2018.08</span></div><div class="col-sm-4"><a class="btn btn-lg cfa-button" target="_blank" href="https://blitzresearch.itch.io/monkey2">Get them now!</a></div></div></div> </div><div class="container main-content-area"><div class="row side-pull-left"><div class="main-content-inner col-sm-12 col-md-8"><div id="primary" class="content-area"><main id="main" class="site-main" role="main"><div class="post-inner-content"><article id="post-97" class="post-97 page type-page status-publish hentry"><header class="entry-header page-header"><h1 class="entry-title">About Monkey 2</h1></header><!-- .entry-header --><div class="entry-content"><p>Monkey2 is a new programming language designed by Mark Sibly, creator of the ‘Blitz’ range of languages.</p><p>While staying true to the ‘basic’ style of the original blitz languages, Monkey2 offers some very powerful new features including:</p><h4>Generic classes and methods.</h4><p>Classes, interfaces, structs, methods and functions can have ‘type’ parameters:</p><!-- Crayon Syntax Highlighter v_2.7.2_beta --><div id="crayon-5cb8a11d7a91a185744233" class="crayon-syntax crayon-theme-tomorrow-night-copy crayon-font-sourcecodepro crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-always disable-anim" style=" font-size: 14px !important; line-height: 16px !important;"><div class="crayon-toolbar" data-settings=" show" style="font-size: 14px !important;height: 21px !important; line-height: 21px !important;"><span class="crayon-title"></span><div class="crayon-tools" style="font-size: 14px !important;height: 21px !important; line-height: 21px !important;"><div class="crayon-button crayon-plain-button" title="Toggle Plain Code"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-copy-button" title="Copy"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-popup-button" title="Open Code In New Window"><div class="crayon-button-icon"></div></div><span class="crayon-language">Monkey</span></div></div><div class="crayon-info" style="min-height: 19.6px !important; line-height: 19.6px !important;"></div><div class="crayon-plain-wrap"><textarea wrap="soft" class="crayon-plain print-no" data-settings="" readonly style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 14px !important; line-height: 16px !important;">struct Rect<T>Field x0:T,y0:TField x1:T,y1:TEndFunction Main()Local r:=New Rect<Float>End</textarea></div><div class="crayon-main" style=" max-height: 500px;"><table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums " data-settings="show"><div class="crayon-nums-content" style="font-size: 14px !important; line-height: 16px !important;"><div class="crayon-num" data-line="crayon-5cb8a11d7a91a185744233-1">1</div><div class="crayon-num" data-line="crayon-5cb8a11d7a91a185744233-2">2</div><div class="crayon-num" data-line="crayon-5cb8a11d7a91a185744233-3">3</div><div class="crayon-num" data-line="crayon-5cb8a11d7a91a185744233-4">4</div><div class="crayon-num" data-line="crayon-5cb8a11d7a91a185744233-5">5</div><div class="crayon-num" data-line="crayon-5cb8a11d7a91a185744233-6">6</div><div class="crayon-num" data-line="crayon-5cb8a11d7a91a185744233-7">7</div><div class="crayon-num" data-line="crayon-5cb8a11d7a91a185744233-8">8</div></div></td><td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 16px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5cb8a11d7a91a185744233-1"><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-v">Rect</span><span class="crayon-e "><T></span></div><div class="crayon-line" id="crayon-5cb8a11d7a91a185744233-2"><span class="crayon-h"> </span><span class="crayon-r">Field</span><span class="crayon-h"> </span><span class="crayon-v">x0</span><span class="crayon-o">:</span><span class="crayon-v">T</span><span class="crayon-sy">,</span><span class="crayon-v">y0</span><span class="crayon-o">:</span><span class="crayon-i">T</span></div><div class="crayon-line" id="crayon-5cb8a11d7a91a185744233-3"><span class="crayon-h"> </span><span class="crayon-r">Field</span><span class="crayon-h"> </span><span class="crayon-v">x1</span><span class="crayon-o">:</span><span class="crayon-v">T</span><span class="crayon-sy">,</span><span class="crayon-v">y1</span><span class="crayon-o">:</span><span class="crayon-i">T</span></div><div class="crayon-line" id="crayon-5cb8a11d7a91a185744233-4"><span class="crayon-st">End</span></div><div class="crayon-line" id="crayon-5cb8a11d7a91a185744233-5"> </div><div class="crayon-line" id="crayon-5cb8a11d7a91a185744233-6"><span class="crayon-t">Function</span><span class="crayon-h"> </span><span class="crayon-e">Main</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a91a185744233-7"><span class="crayon-h"> </span><span class="crayon-m">Local</span><span class="crayon-h"> </span><span class="crayon-v">r</span><span class="crayon-o">:</span><span class="crayon-o">=</span><span class="crayon-r">New</span><span class="crayon-h"> </span><span class="crayon-v">Rect</span><span class="crayon-e "><Float></span></div><div class="crayon-line" id="crayon-5cb8a11d7a91a185744233-8"><span class="crayon-st">End</span></div></div></td></tr></table></div></div><!-- [Format Time: 0.0009 seconds] --><p><h4>‘First class’ functions.</h4><p>Functions (and methods) can be stored in variables and passed to/from other functions.</p><!-- Crayon Syntax Highlighter v_2.7.2_beta --><div id="crayon-5cb8a11d7a924636118963" class="crayon-syntax crayon-theme-tomorrow-night-copy crayon-font-sourcecodepro crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-always disable-anim" style=" font-size: 14px !important; line-height: 16px !important;"><div class="crayon-toolbar" data-settings=" show" style="font-size: 14px !important;height: 21px !important; line-height: 21px !important;"><span class="crayon-title"></span><div class="crayon-tools" style="font-size: 14px !important;height: 21px !important; line-height: 21px !important;"><div class="crayon-button crayon-plain-button" title="Toggle Plain Code"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-copy-button" title="Copy"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-popup-button" title="Open Code In New Window"><div class="crayon-button-icon"></div></div><span class="crayon-language">Monkey</span></div></div><div class="crayon-info" style="min-height: 19.6px !important; line-height: 19.6px !important;"></div><div class="crayon-plain-wrap"><textarea wrap="soft" class="crayon-plain print-no" data-settings="" readonly style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 14px !important; line-height: 16px !important;">Function Test1()Print "Test1!"EndFunction Test2()Print "Test2!"EndFunction Tester( test:Void() )test()EndFunction Main()Tester( Test1 )Tester( Test2 )End</textarea></div><div class="crayon-main" style=" max-height: 500px;"><table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums " data-settings="show"><div class="crayon-nums-content" style="font-size: 14px !important; line-height: 16px !important;"><div class="crayon-num" data-line="crayon-5cb8a11d7a924636118963-1">1</div><div class="crayon-num" data-line="crayon-5cb8a11d7a924636118963-2">2</div><div class="crayon-num" data-line="crayon-5cb8a11d7a924636118963-3">3</div><div class="crayon-num" data-line="crayon-5cb8a11d7a924636118963-4">4</div><div class="crayon-num" data-line="crayon-5cb8a11d7a924636118963-5">5</div><div class="crayon-num" data-line="crayon-5cb8a11d7a924636118963-6">6</div><div class="crayon-num" data-line="crayon-5cb8a11d7a924636118963-7">7</div><div class="crayon-num" data-line="crayon-5cb8a11d7a924636118963-8">8</div><div class="crayon-num" data-line="crayon-5cb8a11d7a924636118963-9">9</div><div class="crayon-num" data-line="crayon-5cb8a11d7a924636118963-10">10</div><div class="crayon-num" data-line="crayon-5cb8a11d7a924636118963-11">11</div><div class="crayon-num" data-line="crayon-5cb8a11d7a924636118963-12">12</div><div class="crayon-num" data-line="crayon-5cb8a11d7a924636118963-13">13</div><div class="crayon-num" data-line="crayon-5cb8a11d7a924636118963-14">14</div><div class="crayon-num" data-line="crayon-5cb8a11d7a924636118963-15">15</div><div class="crayon-num" data-line="crayon-5cb8a11d7a924636118963-16">16</div></div></td><td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 16px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5cb8a11d7a924636118963-1"><span class="crayon-t">Function</span><span class="crayon-h"> </span><span class="crayon-e">Test1</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a924636118963-2"><span class="crayon-h"> </span><span class="crayon-i">Print</span><span class="crayon-h"> </span><span class="crayon-s">"Test1!"</span></div><div class="crayon-line" id="crayon-5cb8a11d7a924636118963-3"><span class="crayon-st">End</span></div><div class="crayon-line" id="crayon-5cb8a11d7a924636118963-4"> </div><div class="crayon-line" id="crayon-5cb8a11d7a924636118963-5"><span class="crayon-t">Function</span><span class="crayon-h"> </span><span class="crayon-e">Test2</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a924636118963-6"><span class="crayon-h"> </span><span class="crayon-i">Print</span><span class="crayon-h"> </span><span class="crayon-s">"Test2!"</span></div><div class="crayon-line" id="crayon-5cb8a11d7a924636118963-7"><span class="crayon-st">End</span></div><div class="crayon-line" id="crayon-5cb8a11d7a924636118963-8"> </div><div class="crayon-line" id="crayon-5cb8a11d7a924636118963-9"><span class="crayon-t">Function</span><span class="crayon-h"> </span><span class="crayon-e">Tester</span><span class="crayon-sy">(</span><span class="crayon-h"> </span><span class="crayon-v">test</span><span class="crayon-o">:</span><span class="crayon-t">Void</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a924636118963-10"><span class="crayon-h"> </span><span class="crayon-e">test</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a924636118963-11"><span class="crayon-st">End</span></div><div class="crayon-line" id="crayon-5cb8a11d7a924636118963-12"> </div><div class="crayon-line" id="crayon-5cb8a11d7a924636118963-13"><span class="crayon-t">Function</span><span class="crayon-h"> </span><span class="crayon-e">Main</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a924636118963-14"><span class="crayon-h"> </span><span class="crayon-e">Tester</span><span class="crayon-sy">(</span><span class="crayon-h"> </span><span class="crayon-i">Test1</span><span class="crayon-h"> </span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a924636118963-15"><span class="crayon-h"> </span><span class="crayon-e">Tester</span><span class="crayon-sy">(</span><span class="crayon-h"> </span><span class="crayon-i">Test2</span><span class="crayon-h"> </span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a924636118963-16"><span class="crayon-st">End</span></div></div></td></tr></table></div></div><!-- [Format Time: 0.0010 seconds] --><p><h4>Lambda functions.</h4><p>Lambda functions allow you to create closures:</p><!-- Crayon Syntax Highlighter v_2.7.2_beta --><div id="crayon-5cb8a11d7a928417133420" class="crayon-syntax crayon-theme-tomorrow-night-copy crayon-font-sourcecodepro crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-always disable-anim" style=" font-size: 14px !important; line-height: 16px !important;"><div class="crayon-toolbar" data-settings=" show" style="font-size: 14px !important;height: 21px !important; line-height: 21px !important;"><span class="crayon-title"></span><div class="crayon-tools" style="font-size: 14px !important;height: 21px !important; line-height: 21px !important;"><div class="crayon-button crayon-plain-button" title="Toggle Plain Code"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-copy-button" title="Copy"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-popup-button" title="Open Code In New Window"><div class="crayon-button-icon"></div></div><span class="crayon-language">Monkey</span></div></div><div class="crayon-info" style="min-height: 19.6px !important; line-height: 19.6px !important;"></div><div class="crayon-plain-wrap"><textarea wrap="soft" class="crayon-plain print-no" data-settings="" readonly style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 14px !important; line-height: 16px !important;">Function Test( func:Void() )func()EndFunction Main()For Local i:=0 Until 10Test( Lambda()Print iEnd )NextEnd</textarea></div><div class="crayon-main" style=" max-height: 500px;"><table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums " data-settings="show"><div class="crayon-nums-content" style="font-size: 14px !important; line-height: 16px !important;"><div class="crayon-num" data-line="crayon-5cb8a11d7a928417133420-1">1</div><div class="crayon-num" data-line="crayon-5cb8a11d7a928417133420-2">2</div><div class="crayon-num" data-line="crayon-5cb8a11d7a928417133420-3">3</div><div class="crayon-num" data-line="crayon-5cb8a11d7a928417133420-4">4</div><div class="crayon-num" data-line="crayon-5cb8a11d7a928417133420-5">5</div><div class="crayon-num" data-line="crayon-5cb8a11d7a928417133420-6">6</div><div class="crayon-num" data-line="crayon-5cb8a11d7a928417133420-7">7</div><div class="crayon-num" data-line="crayon-5cb8a11d7a928417133420-8">8</div><div class="crayon-num" data-line="crayon-5cb8a11d7a928417133420-9">9</div><div class="crayon-num" data-line="crayon-5cb8a11d7a928417133420-10">10</div><div class="crayon-num" data-line="crayon-5cb8a11d7a928417133420-11">11</div><div class="crayon-num" data-line="crayon-5cb8a11d7a928417133420-12">12</div><div class="crayon-num" data-line="crayon-5cb8a11d7a928417133420-13">13</div><div class="crayon-num" data-line="crayon-5cb8a11d7a928417133420-14">14</div></div></td><td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 16px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5cb8a11d7a928417133420-1"><span class="crayon-t">Function</span><span class="crayon-h"> </span><span class="crayon-e">Test</span><span class="crayon-sy">(</span><span class="crayon-h"> </span><span class="crayon-v">func</span><span class="crayon-o">:</span><span class="crayon-t">Void</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a928417133420-2"><span class="crayon-h"> </span><span class="crayon-e">func</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a928417133420-3"><span class="crayon-st">End</span></div><div class="crayon-line" id="crayon-5cb8a11d7a928417133420-4"> </div><div class="crayon-line" id="crayon-5cb8a11d7a928417133420-5"><span class="crayon-t">Function</span><span class="crayon-h"> </span><span class="crayon-e">Main</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a928417133420-6"> </div><div class="crayon-line" id="crayon-5cb8a11d7a928417133420-7"><span class="crayon-h"> </span><span class="crayon-st">For</span><span class="crayon-h"> </span><span class="crayon-m">Local</span><span class="crayon-h"> </span><span class="crayon-v">i</span><span class="crayon-o">:</span><span class="crayon-o">=</span><span class="crayon-cn">0</span><span class="crayon-h"> </span><span class="crayon-i">Until</span><span class="crayon-h"> </span><span class="crayon-cn">10</span></div><div class="crayon-line" id="crayon-5cb8a11d7a928417133420-8"><span class="crayon-h"> </span><span class="crayon-e">Test</span><span class="crayon-sy">(</span><span class="crayon-h"> </span><span class="crayon-e">Lambda</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a928417133420-9"><span class="crayon-h"> </span><span class="crayon-i">Print</span><span class="crayon-h"> </span><span class="crayon-i">i</span></div><div class="crayon-line" id="crayon-5cb8a11d7a928417133420-10"><span class="crayon-h"> </span><span class="crayon-st">End</span><span class="crayon-h"> </span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a928417133420-11"><span class="crayon-h"> </span><span class="crayon-st">Next</span></div><div class="crayon-line" id="crayon-5cb8a11d7a928417133420-12"> </div><div class="crayon-line" id="crayon-5cb8a11d7a928417133420-13"><span class="crayon-st">End</span></div><div class="crayon-line" id="crayon-5cb8a11d7a928417133420-14"> </div></div></td></tr></table></div></div><!-- [Format Time: 0.0010 seconds] --><p><h4>New ‘struct’ type that provides value semantics.</h4><p>Structs are similar to classes in that they encapsulate member data, but differ in that they are passed around ‘by value’ instead of ‘by reference’.</p><p>This allows structs to be efficiently created on the stack without any garbage collection overhead.</p><!-- Crayon Syntax Highlighter v_2.7.2_beta --><div id="crayon-5cb8a11d7a92b071552241" class="crayon-syntax crayon-theme-tomorrow-night-copy crayon-font-sourcecodepro crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-always disable-anim" style=" font-size: 14px !important; line-height: 16px !important;"><div class="crayon-toolbar" data-settings=" show" style="font-size: 14px !important;height: 21px !important; line-height: 21px !important;"><span class="crayon-title"></span><div class="crayon-tools" style="font-size: 14px !important;height: 21px !important; line-height: 21px !important;"><div class="crayon-button crayon-plain-button" title="Toggle Plain Code"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-copy-button" title="Copy"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-popup-button" title="Open Code In New Window"><div class="crayon-button-icon"></div></div><span class="crayon-language">Monkey</span></div></div><div class="crayon-info" style="min-height: 19.6px !important; line-height: 19.6px !important;"></div><div class="crayon-plain-wrap"><textarea wrap="soft" class="crayon-plain print-no" data-settings="" readonly style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 14px !important; line-height: 16px !important;">Struct SField data:Int=10EndFunction Test( s:S )s.data=100EndFunction Main()Local s:=new S 'Create a new S on the stack (very fast!)Test( s ) 'Test gets a copy of 's'.Print s.data 'Print '10'End</textarea></div><div class="crayon-main" style=" max-height: 500px;"><table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums " data-settings="show"><div class="crayon-nums-content" style="font-size: 14px !important; line-height: 16px !important;"><div class="crayon-num" data-line="crayon-5cb8a11d7a92b071552241-1">1</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92b071552241-2">2</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92b071552241-3">3</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92b071552241-4">4</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92b071552241-5">5</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92b071552241-6">6</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92b071552241-7">7</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92b071552241-8">8</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92b071552241-9">9</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92b071552241-10">10</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92b071552241-11">11</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92b071552241-12">12</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92b071552241-13">13</div></div></td><td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 16px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5cb8a11d7a92b071552241-1"><span class="crayon-t">Struct</span><span class="crayon-h"> </span><span class="crayon-i">S</span></div><div class="crayon-line" id="crayon-5cb8a11d7a92b071552241-2"><span class="crayon-h"> </span><span class="crayon-r">Field</span><span class="crayon-h"> </span><span class="crayon-v">data</span><span class="crayon-o">:</span><span class="crayon-t">Int</span><span class="crayon-o">=</span><span class="crayon-cn">10</span></div><div class="crayon-line" id="crayon-5cb8a11d7a92b071552241-3"><span class="crayon-st">End</span></div><div class="crayon-line" id="crayon-5cb8a11d7a92b071552241-4"> </div><div class="crayon-line" id="crayon-5cb8a11d7a92b071552241-5"><span class="crayon-t">Function</span><span class="crayon-h"> </span><span class="crayon-e">Test</span><span class="crayon-sy">(</span><span class="crayon-h"> </span><span class="crayon-v">s</span><span class="crayon-o">:</span><span class="crayon-i">S</span><span class="crayon-h"> </span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a92b071552241-6"><span class="crayon-h"> </span><span class="crayon-v">s</span><span class="crayon-sy">.</span><span class="crayon-v">data</span><span class="crayon-o">=</span><span class="crayon-cn">100</span></div><div class="crayon-line" id="crayon-5cb8a11d7a92b071552241-7"><span class="crayon-st">End</span></div><div class="crayon-line" id="crayon-5cb8a11d7a92b071552241-8"> </div><div class="crayon-line" id="crayon-5cb8a11d7a92b071552241-9"><span class="crayon-t">Function</span><span class="crayon-h"> </span><span class="crayon-e">Main</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a92b071552241-10"><span class="crayon-h"> </span><span class="crayon-m">Local</span><span class="crayon-h"> </span><span class="crayon-v">s</span><span class="crayon-o">:</span><span class="crayon-o">=</span><span class="crayon-r">new</span><span class="crayon-h"> </span><span class="crayon-i">S</span><span class="crayon-h"> </span><span class="crayon-c">'Create a new S on the stack (very fast!)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a92b071552241-11"><span class="crayon-h"> </span><span class="crayon-e">Test</span><span class="crayon-sy">(</span><span class="crayon-h"> </span><span class="crayon-i">s</span><span class="crayon-h"> </span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-c">'Test gets a copy of 's'.</span></div><div class="crayon-line" id="crayon-5cb8a11d7a92b071552241-12"><span class="crayon-h"> </span><span class="crayon-i">Print</span><span class="crayon-h"> </span><span class="crayon-v">s</span><span class="crayon-sy">.</span><span class="crayon-i">data</span><span class="crayon-h"> </span><span class="crayon-c">'Print '10'</span></div><div class="crayon-line" id="crayon-5cb8a11d7a92b071552241-13"><span class="crayon-st">End</span></div></div></td></tr></table></div></div><!-- [Format Time: 0.0012 seconds] --><p><h4>Fibers for easy asynchronous programming.</h4><p>Fibers provide support for ‘cooperative’ multithreading:</p><!-- Crayon Syntax Highlighter v_2.7.2_beta --><div id="crayon-5cb8a11d7a92e045588618" class="crayon-syntax crayon-theme-tomorrow-night-copy crayon-font-sourcecodepro crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-always disable-anim" style=" font-size: 14px !important; line-height: 16px !important;"><div class="crayon-toolbar" data-settings=" show" style="font-size: 14px !important;height: 21px !important; line-height: 21px !important;"><span class="crayon-title"></span><div class="crayon-tools" style="font-size: 14px !important;height: 21px !important; line-height: 21px !important;"><div class="crayon-button crayon-plain-button" title="Toggle Plain Code"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-copy-button" title="Copy"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-popup-button" title="Open Code In New Window"><div class="crayon-button-icon"></div></div><span class="crayon-language">Monkey</span></div></div><div class="crayon-info" style="min-height: 19.6px !important; line-height: 19.6px !important;"></div><div class="crayon-plain-wrap"><textarea wrap="soft" class="crayon-plain print-no" data-settings="" readonly style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 14px !important; line-height: 16px !important;">Function Server( host:String,service:String )Local server:=Socket.Listen( host,service )RepeatLocal client:=server.Accept()New Fiber( Lambda()Local data:=client.Receive(...)End )ForeverEnd</textarea></div><div class="crayon-main" style=" max-height: 500px;"><table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums " data-settings="show"><div class="crayon-nums-content" style="font-size: 14px !important; line-height: 16px !important;"><div class="crayon-num" data-line="crayon-5cb8a11d7a92e045588618-1">1</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92e045588618-2">2</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92e045588618-3">3</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92e045588618-4">4</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92e045588618-5">5</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92e045588618-6">6</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92e045588618-7">7</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92e045588618-8">8</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92e045588618-9">9</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92e045588618-10">10</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92e045588618-11">11</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92e045588618-12">12</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92e045588618-13">13</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92e045588618-14">14</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92e045588618-15">15</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92e045588618-16">16</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92e045588618-17">17</div><div class="crayon-num" data-line="crayon-5cb8a11d7a92e045588618-18">18</div></div></td><td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 16px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5cb8a11d7a92e045588618-1"><span class="crayon-t">Function</span><span class="crayon-h"> </span><span class="crayon-e">Server</span><span class="crayon-sy">(</span><span class="crayon-h"> </span><span class="crayon-v">host</span><span class="crayon-o">:</span><span class="crayon-t">String</span><span class="crayon-sy">,</span><span class="crayon-v">service</span><span class="crayon-o">:</span><span class="crayon-t">String</span><span class="crayon-h"> </span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a92e045588618-2"> </div><div class="crayon-line" id="crayon-5cb8a11d7a92e045588618-3"><span class="crayon-h"> </span><span class="crayon-m">Local</span><span class="crayon-h"> </span><span class="crayon-v">server</span><span class="crayon-o">:</span><span class="crayon-o">=</span><span class="crayon-v">Socket</span><span class="crayon-sy">.</span><span class="crayon-e">Listen</span><span class="crayon-sy">(</span><span class="crayon-h"> </span><span class="crayon-v">host</span><span class="crayon-sy">,</span><span class="crayon-i">service</span><span class="crayon-h"> </span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a92e045588618-4"> </div><div class="crayon-line" id="crayon-5cb8a11d7a92e045588618-5"><span class="crayon-h"> </span><span class="crayon-st">Repeat</span></div><div class="crayon-line" id="crayon-5cb8a11d7a92e045588618-6"> </div><div class="crayon-line" id="crayon-5cb8a11d7a92e045588618-7"><span class="crayon-h"> </span><span class="crayon-m">Local</span><span class="crayon-h"> </span><span class="crayon-v">client</span><span class="crayon-o">:</span><span class="crayon-o">=</span><span class="crayon-v">server</span><span class="crayon-sy">.</span><span class="crayon-e">Accept</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a92e045588618-8"> </div><div class="crayon-line" id="crayon-5cb8a11d7a92e045588618-9"><span class="crayon-h"> </span><span class="crayon-r">New</span><span class="crayon-h"> </span><span class="crayon-e">Fiber</span><span class="crayon-sy">(</span><span class="crayon-h"> </span><span class="crayon-e">Lambda</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a92e045588618-10"> </div><div class="crayon-line" id="crayon-5cb8a11d7a92e045588618-11"><span class="crayon-h"> </span><span class="crayon-m">Local</span><span class="crayon-h"> </span><span class="crayon-v">data</span><span class="crayon-o">:</span><span class="crayon-o">=</span><span class="crayon-v">client</span><span class="crayon-sy">.</span><span class="crayon-e">Receive</span><span class="crayon-sy">(</span><span class="crayon-sy">.</span><span class="crayon-sy">.</span><span class="crayon-sy">.</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a92e045588618-12"><span class="crayon-h"> </span></div><div class="crayon-line" id="crayon-5cb8a11d7a92e045588618-13"><span class="crayon-h"> </span><span class="crayon-st">End</span><span class="crayon-h"> </span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a92e045588618-14"> </div><div class="crayon-line" id="crayon-5cb8a11d7a92e045588618-15"><span class="crayon-h"> </span><span class="crayon-st">Forever</span></div><div class="crayon-line" id="crayon-5cb8a11d7a92e045588618-16"> </div><div class="crayon-line" id="crayon-5cb8a11d7a92e045588618-17"><span class="crayon-st">End</span></div><div class="crayon-line" id="crayon-5cb8a11d7a92e045588618-18"> </div></div></td></tr></table></div></div><!-- [Format Time: 0.0013 seconds] --><p><h4>Operator overloading.</h4><p>Operator overloading allows you to override the meaning of the built-in language operators, making for more expressive code:</p><!-- Crayon Syntax Highlighter v_2.7.2_beta --><div id="crayon-5cb8a11d7a930058946164" class="crayon-syntax crayon-theme-tomorrow-night-copy crayon-font-sourcecodepro crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-always disable-anim" style=" font-size: 14px !important; line-height: 16px !important;"><div class="crayon-toolbar" data-settings=" show" style="font-size: 14px !important;height: 21px !important; line-height: 21px !important;"><span class="crayon-title"></span><div class="crayon-tools" style="font-size: 14px !important;height: 21px !important; line-height: 21px !important;"><div class="crayon-button crayon-plain-button" title="Toggle Plain Code"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-copy-button" title="Copy"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-popup-button" title="Open Code In New Window"><div class="crayon-button-icon"></div></div><span class="crayon-language">Monkey</span></div></div><div class="crayon-info" style="min-height: 19.6px !important; line-height: 19.6px !important;"></div><div class="crayon-plain-wrap"><textarea wrap="soft" class="crayon-plain print-no" data-settings="" readonly style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 14px !important; line-height: 16px !important;">Struct Vec2Field x:FloatField y:FloatMethod New( x:float,y:Float )Self.x=xSelf.y=yEndOperator+:Vec2( v:Vec2 )Return New Vec2( x+v.x,y+v.y )EndOperator To:String()Return "Vec2("+x+","+y+")"EndEndFunction Main()Local v0:=New Vec2( 10,20 )Local v1:=New Vec2( 30,40 )Print v0+v1End</textarea></div><div class="crayon-main" style=" max-height: 500px;"><table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums " data-settings="show"><div class="crayon-nums-content" style="font-size: 14px !important; line-height: 16px !important;"><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-1">1</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-2">2</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-3">3</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-4">4</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-5">5</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-6">6</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-7">7</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-8">8</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-9">9</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-10">10</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-11">11</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-12">12</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-13">13</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-14">14</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-15">15</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-16">16</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-17">17</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-18">18</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-19">19</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-20">20</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-21">21</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-22">22</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-23">23</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-24">24</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-25">25</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-26">26</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-27">27</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-28">28</div><div class="crayon-num" data-line="crayon-5cb8a11d7a930058946164-29">29</div></div></td><td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 16px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-1"><span class="crayon-t">Struct</span><span class="crayon-h"> </span><span class="crayon-e">Vec2</span></div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-2"><span class="crayon-e"> </span></div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-3"><span class="crayon-e"> </span><span class="crayon-r">Field</span><span class="crayon-h"> </span><span class="crayon-v">x</span><span class="crayon-o">:</span><span class="crayon-t">Float</span></div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-4"><span class="crayon-h"> </span><span class="crayon-r">Field</span><span class="crayon-h"> </span><span class="crayon-v">y</span><span class="crayon-o">:</span><span class="crayon-t">Float</span></div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-5"> </div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-6"><span class="crayon-h"> </span><span class="crayon-e">Method </span><span class="crayon-r">New</span><span class="crayon-sy">(</span><span class="crayon-h"> </span><span class="crayon-v">x</span><span class="crayon-o">:</span><span class="crayon-t">float</span><span class="crayon-sy">,</span><span class="crayon-v">y</span><span class="crayon-o">:</span><span class="crayon-t">Float</span><span class="crayon-h"> </span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-7"><span class="crayon-h"> </span><span class="crayon-r">Self</span><span class="crayon-sy">.</span><span class="crayon-v">x</span><span class="crayon-o">=</span><span class="crayon-i">x</span></div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-8"><span class="crayon-h"> </span><span class="crayon-r">Self</span><span class="crayon-sy">.</span><span class="crayon-v">y</span><span class="crayon-o">=</span><span class="crayon-i">y</span></div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-9"><span class="crayon-h"> </span><span class="crayon-st">End</span></div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-10"> </div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-11"><span class="crayon-h"> </span><span class="crayon-v">Operator</span><span class="crayon-o">+</span><span class="crayon-o">:</span><span class="crayon-e">Vec2</span><span class="crayon-sy">(</span><span class="crayon-h"> </span><span class="crayon-v">v</span><span class="crayon-o">:</span><span class="crayon-i">Vec2</span><span class="crayon-h"> </span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-12"><span class="crayon-h"> </span><span class="crayon-st">Return</span><span class="crayon-h"> </span><span class="crayon-r">New</span><span class="crayon-h"> </span><span class="crayon-e">Vec2</span><span class="crayon-sy">(</span><span class="crayon-h"> </span><span class="crayon-v">x</span><span class="crayon-o">+</span><span class="crayon-v">v</span><span class="crayon-sy">.</span><span class="crayon-v">x</span><span class="crayon-sy">,</span><span class="crayon-v">y</span><span class="crayon-o">+</span><span class="crayon-v">v</span><span class="crayon-sy">.</span><span class="crayon-i">y</span><span class="crayon-h"> </span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-13"><span class="crayon-h"> </span><span class="crayon-st">End</span></div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-14"> </div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-15"><span class="crayon-h"> </span><span class="crayon-e">Operator </span><span class="crayon-st">To</span><span class="crayon-o">:</span><span class="crayon-t">String</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-16"><span class="crayon-h"> </span><span class="crayon-st">Return</span><span class="crayon-h"> </span><span class="crayon-s">"Vec2("</span><span class="crayon-o">+</span><span class="crayon-v">x</span><span class="crayon-o">+</span><span class="crayon-s">","</span><span class="crayon-o">+</span><span class="crayon-v">y</span><span class="crayon-o">+</span><span class="crayon-s">")"</span></div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-17"><span class="crayon-h"> </span><span class="crayon-st">End</span></div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-18"> </div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-19"><span class="crayon-st">End</span></div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-20"> </div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-21"><span class="crayon-t">Function</span><span class="crayon-h"> </span><span class="crayon-e">Main</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-22"> </div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-23"><span class="crayon-h"> </span><span class="crayon-m">Local</span><span class="crayon-h"> </span><span class="crayon-v">v0</span><span class="crayon-o">:</span><span class="crayon-o">=</span><span class="crayon-r">New</span><span class="crayon-h"> </span><span class="crayon-e">Vec2</span><span class="crayon-sy">(</span><span class="crayon-h"> </span><span class="crayon-cn">10</span><span class="crayon-sy">,</span><span class="crayon-cn">20</span><span class="crayon-h"> </span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-24"><span class="crayon-h"> </span><span class="crayon-m">Local</span><span class="crayon-h"> </span><span class="crayon-v">v1</span><span class="crayon-o">:</span><span class="crayon-o">=</span><span class="crayon-r">New</span><span class="crayon-h"> </span><span class="crayon-e">Vec2</span><span class="crayon-sy">(</span><span class="crayon-h"> </span><span class="crayon-cn">30</span><span class="crayon-sy">,</span><span class="crayon-cn">40</span><span class="crayon-h"> </span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-25"><span class="crayon-h"> </span></div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-26"><span class="crayon-h"> </span><span class="crayon-e">Print </span><span class="crayon-v">v0</span><span class="crayon-o">+</span><span class="crayon-e">v1</span></div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-27"> </div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-28"><span class="crayon-st">End</span></div><div class="crayon-line" id="crayon-5cb8a11d7a930058946164-29"> </div></div></td></tr></table></div></div><!-- [Format Time: 0.0023 seconds] --><p><h4>Class extensions.</h4><p>Class extensions allow you to add extra methods and functions to existing classes.</p><h4>Fully garbage collected.</h4><p>Monkey2 provides a ‘mostly’ incremental garbage collector that efficiently collects garbage as it runs without any of those annoying ‘sweep’ spikes found in typical garbage collectors.</p><h4>Optional reflection features.</h4><p>Monkey2 includes an optional reflection system that allows you to inspect and modify variables and values at runtime:</p><!-- Crayon Syntax Highlighter v_2.7.2_beta --><div id="crayon-5cb8a11d7a933069291641" class="crayon-syntax crayon-theme-tomorrow-night-copy crayon-font-sourcecodepro crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-always disable-anim" style=" font-size: 14px !important; line-height: 16px !important;"><div class="crayon-toolbar" data-settings=" show" style="font-size: 14px !important;height: 21px !important; line-height: 21px !important;"><span class="crayon-title"></span><div class="crayon-tools" style="font-size: 14px !important;height: 21px !important; line-height: 21px !important;"><div class="crayon-button crayon-plain-button" title="Toggle Plain Code"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-copy-button" title="Copy"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-popup-button" title="Open Code In New Window"><div class="crayon-button-icon"></div></div><span class="crayon-language">Monkey</span></div></div><div class="crayon-info" style="min-height: 19.6px !important; line-height: 19.6px !important;"></div><div class="crayon-plain-wrap"><textarea wrap="soft" class="crayon-plain print-no" data-settings="" readonly style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 14px !important; line-height: 16px !important;">#Import "<reflection>"Class CMethod Update( msg:String )Print "C.Update : msg="+msgEndEndFunction Main()Local c:=New CLocal type:=Typeof( c )Print typeLocal decl:=type.GetDecl( "Update" )decl.Invoke( c,"Hello World!" )End</textarea></div><div class="crayon-main" style=" max-height: 500px;"><table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums " data-settings="show"><div class="crayon-nums-content" style="font-size: 14px !important; line-height: 16px !important;"><div class="crayon-num" data-line="crayon-5cb8a11d7a933069291641-1">1</div><div class="crayon-num" data-line="crayon-5cb8a11d7a933069291641-2">2</div><div class="crayon-num" data-line="crayon-5cb8a11d7a933069291641-3">3</div><div class="crayon-num" data-line="crayon-5cb8a11d7a933069291641-4">4</div><div class="crayon-num" data-line="crayon-5cb8a11d7a933069291641-5">5</div><div class="crayon-num" data-line="crayon-5cb8a11d7a933069291641-6">6</div><div class="crayon-num" data-line="crayon-5cb8a11d7a933069291641-7">7</div><div class="crayon-num" data-line="crayon-5cb8a11d7a933069291641-8">8</div><div class="crayon-num" data-line="crayon-5cb8a11d7a933069291641-9">9</div><div class="crayon-num" data-line="crayon-5cb8a11d7a933069291641-10">10</div><div class="crayon-num" data-line="crayon-5cb8a11d7a933069291641-11">11</div><div class="crayon-num" data-line="crayon-5cb8a11d7a933069291641-12">12</div><div class="crayon-num" data-line="crayon-5cb8a11d7a933069291641-13">13</div><div class="crayon-num" data-line="crayon-5cb8a11d7a933069291641-14">14</div><div class="crayon-num" data-line="crayon-5cb8a11d7a933069291641-15">15</div><div class="crayon-num" data-line="crayon-5cb8a11d7a933069291641-16">16</div><div class="crayon-num" data-line="crayon-5cb8a11d7a933069291641-17">17</div><div class="crayon-num" data-line="crayon-5cb8a11d7a933069291641-18">18</div><div class="crayon-num" data-line="crayon-5cb8a11d7a933069291641-19">19</div><div class="crayon-num" data-line="crayon-5cb8a11d7a933069291641-20">20</div><div class="crayon-num" data-line="crayon-5cb8a11d7a933069291641-21">21</div><div class="crayon-num" data-line="crayon-5cb8a11d7a933069291641-22">22</div></div></td><td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 16px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5cb8a11d7a933069291641-1"><span class="crayon-o">#</span><span class="crayon-r">Import</span><span class="crayon-h"> </span><span class="crayon-s">"<reflection>"</span></div><div class="crayon-line" id="crayon-5cb8a11d7a933069291641-2"> </div><div class="crayon-line" id="crayon-5cb8a11d7a933069291641-3"><span class="crayon-t">Class</span><span class="crayon-h"> </span><span class="crayon-i">C</span></div><div class="crayon-line" id="crayon-5cb8a11d7a933069291641-4"> </div><div class="crayon-line" id="crayon-5cb8a11d7a933069291641-5"><span class="crayon-h"> </span><span class="crayon-e">Method </span><span class="crayon-e">Update</span><span class="crayon-sy">(</span><span class="crayon-h"> </span><span class="crayon-v">msg</span><span class="crayon-o">:</span><span class="crayon-t">String</span><span class="crayon-h"> </span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a933069291641-6"><span class="crayon-h"> </span><span class="crayon-i">Print</span><span class="crayon-h"> </span><span class="crayon-s">"C.Update : msg="</span><span class="crayon-o">+</span><span class="crayon-e">msg</span></div><div class="crayon-line" id="crayon-5cb8a11d7a933069291641-7"><span class="crayon-e"> </span><span class="crayon-st">End</span></div><div class="crayon-line" id="crayon-5cb8a11d7a933069291641-8"> </div><div class="crayon-line" id="crayon-5cb8a11d7a933069291641-9"><span class="crayon-st">End</span></div><div class="crayon-line" id="crayon-5cb8a11d7a933069291641-10"> </div><div class="crayon-line" id="crayon-5cb8a11d7a933069291641-11"><span class="crayon-t">Function</span><span class="crayon-h"> </span><span class="crayon-e">Main</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a933069291641-12"> </div><div class="crayon-line" id="crayon-5cb8a11d7a933069291641-13"><span class="crayon-h"> </span><span class="crayon-m">Local</span><span class="crayon-h"> </span><span class="crayon-v">c</span><span class="crayon-o">:</span><span class="crayon-o">=</span><span class="crayon-r">New</span><span class="crayon-h"> </span><span class="crayon-i">C</span></div><div class="crayon-line" id="crayon-5cb8a11d7a933069291641-14"> </div><div class="crayon-line" id="crayon-5cb8a11d7a933069291641-15"><span class="crayon-h"> </span><span class="crayon-m">Local</span><span class="crayon-h"> </span><span class="crayon-v">type</span><span class="crayon-o">:</span><span class="crayon-o">=</span><span class="crayon-e">Typeof</span><span class="crayon-sy">(</span><span class="crayon-h"> </span><span class="crayon-i">c</span><span class="crayon-h"> </span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a933069291641-16"><span class="crayon-h"> </span><span class="crayon-e">Print </span><span class="crayon-e">type</span></div><div class="crayon-line" id="crayon-5cb8a11d7a933069291641-17"> </div><div class="crayon-line" id="crayon-5cb8a11d7a933069291641-18"><span class="crayon-e"> </span><span class="crayon-m">Local</span><span class="crayon-h"> </span><span class="crayon-v">decl</span><span class="crayon-o">:</span><span class="crayon-o">=</span><span class="crayon-v">type</span><span class="crayon-sy">.</span><span class="crayon-e">GetDecl</span><span class="crayon-sy">(</span><span class="crayon-h"> </span><span class="crayon-s">"Update"</span><span class="crayon-h"> </span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a933069291641-19"><span class="crayon-h"> </span><span class="crayon-v">decl</span><span class="crayon-sy">.</span><span class="crayon-e">Invoke</span><span class="crayon-sy">(</span><span class="crayon-h"> </span><span class="crayon-v">c</span><span class="crayon-sy">,</span><span class="crayon-s">"Hello World!"</span><span class="crayon-h"> </span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5cb8a11d7a933069291641-20"> </div><div class="crayon-line" id="crayon-5cb8a11d7a933069291641-21"><span class="crayon-st">End</span></div><div class="crayon-line" id="crayon-5cb8a11d7a933069291641-22"> </div></div></td></tr></table></div></div><!-- [Format Time: 0.0014 seconds] --><p><h4>Multi-target</h4><p>Monkey2 works on a wide range of targets: Windows, Macos, Linux, Emscripten, Android and iOS.</p><div class="wpulike wpulike-default " ><div class="wp_ulike_general_class wp_ulike_is_unliked"><button type="button"data-ulike-id="97"data-ulike-nonce="b00fcea78c"data-ulike-type="likeThis"data-ulike-status="3" class="wp_ulike_btn wp_ulike_put_image wp_likethis_97"></button><span class="count-box">24+</span> </div></div></div><!-- .entry-content --></article><!-- #post-## --></div></main><!-- #main --></div><!-- #primary --></div><!-- close .main-content-inner --><div id="secondary" class="widget-area col-sm-12 col-md-4" role="complementary"><div class="well"><aside id="media_image-2" class="widget widget_media_image"><a href="https://discord.gg/ZHpRAFp"><img width="298" height="151" src="http://monkeycoder.co.nz/wp-content/uploads/2018/01/discord.gif" class="image wp-image-12929 attachment-full size-full" alt="" style="max-width: 100%; height: auto;" /></a></aside><aside id="bbp_topics_widget-4" class="widget widget_display_topics"><h3 class="widget-title">Recent Forums Topics</h3><ul><li><a class="bbp-forum-title" href="http://monkeycoder.co.nz/forums/topic/100-bounty-mx2-running-on-samsungs-linux-on-dex/">$100 Bounty: MX2 Running on Samsung's Linux on Dex</a></li><li><a class="bbp-forum-title" href="http://monkeycoder.co.nz/forums/topic/banana-glwindow-test-black-output/">Banana glwindow test black output</a></li><li><a class="bbp-forum-title" href="http://monkeycoder.co.nz/forums/topic/android-keyboard/">Android keyboard</a></li><li><a class="bbp-forum-title" href="http://monkeycoder.co.nz/forums/topic/float-rounding/">Float rounding</a></li><li><a class="bbp-forum-title" href="http://monkeycoder.co.nz/forums/topic/mx2-on-linux-on-dex-by-samsung/">MX2 on Linux on Dex by Samsung</a></li><li><a class="bbp-forum-title" href="http://monkeycoder.co.nz/forums/topic/viva-mortis/">Viva Mortis</a></li><li><a class="bbp-forum-title" href="http://monkeycoder.co.nz/forums/topic/requiring-discord-to-join-forums/">Requiring discord to join forums</a></li><li><a class="bbp-forum-title" href="http://monkeycoder.co.nz/forums/topic/lehnsherr/">Lehnsherr</a></li><li><a class="bbp-forum-title" href="http://monkeycoder.co.nz/forums/topic/monkey-x-game-now-an-official-zelda-game/">Monkey-X game now an official Zelda game!</a></li><li><a class="bbp-forum-title" href="http://monkeycoder.co.nz/forums/topic/how-to-use-git-for-your-own-projects-modules-within-the-monkey2-repo/">How to use GIT for your own projects/modules within the monkey2 repo</a></li></ul></aside> </div></div><!-- #secondary --></div><!-- close .row --></div><!-- close .container --></div><!-- close .site-content --><div id="footer-area"><div class="container footer-inner"><div class="row"><div class="footer-widget-area"><div class="col-sm-4 footer-widget" role="complementary"><div id="search-2" class="widget widget_search"><form role="search" method="get" class="form-search" action="http://monkeycoder.co.nz/"><div class="input-group"><label class="screen-reader-text" for="s">Search for:</label><input type="text" class="form-control search-query" placeholder="Search…" value="" name="s" title="Search for:" /><span class="input-group-btn"><button type="submit" class="btn btn-default" name="submit" id="searchsubmit" value="Search"><span class="glyphicon glyphicon-search"></span></button></span></div></form></div><div id="archives-7" class="widget widget_archive"><h3 class="widgettitle">Archives</h3> <label class="screen-reader-text" for="archives-dropdown-7">Archives</label><select id="archives-dropdown-7" name="archive-dropdown" onchange='document.location.href=this.options[this.selectedIndex].value;'><option value="">Select Month</option><option value='http://monkeycoder.co.nz/2018/12/'> December 2018 </option><option value='http://monkeycoder.co.nz/2018/11/'> November 2018 </option><option value='http://monkeycoder.co.nz/2018/09/'> September 2018 </option><option value='http://monkeycoder.co.nz/2018/07/'> July 2018 </option><option value='http://monkeycoder.co.nz/2018/06/'> June 2018 </option><option value='http://monkeycoder.co.nz/2018/05/'> May 2018 </option><option value='http://monkeycoder.co.nz/2018/04/'> April 2018 </option><option value='http://monkeycoder.co.nz/2018/03/'> March 2018 </option><option value='http://monkeycoder.co.nz/2018/02/'> February 2018 </option><option value='http://monkeycoder.co.nz/2018/01/'> January 2018 </option><option value='http://monkeycoder.co.nz/2017/12/'> December 2017 </option><option value='http://monkeycoder.co.nz/2017/11/'> November 2017 </option><option value='http://monkeycoder.co.nz/2017/09/'> September 2017 </option><option value='http://monkeycoder.co.nz/2017/08/'> August 2017 </option><option value='http://monkeycoder.co.nz/2017/06/'> June 2017 </option><option value='http://monkeycoder.co.nz/2017/05/'> May 2017 </option><option value='http://monkeycoder.co.nz/2017/03/'> March 2017 </option><option value='http://monkeycoder.co.nz/2017/01/'> January 2017 </option><option value='http://monkeycoder.co.nz/2016/11/'> November 2016 </option><option value='http://monkeycoder.co.nz/2016/10/'> October 2016 </option><option value='http://monkeycoder.co.nz/2016/09/'> September 2016 </option><option value='http://monkeycoder.co.nz/2016/08/'> August 2016 </option><option value='http://monkeycoder.co.nz/2016/07/'> July 2016 </option><option value='http://monkeycoder.co.nz/2016/06/'> June 2016 </option><option value='http://monkeycoder.co.nz/2016/05/'> May 2016 </option><option value='http://monkeycoder.co.nz/2016/04/'> April 2016 </option><option value='http://monkeycoder.co.nz/2016/03/'> March 2016 </option><option value='http://monkeycoder.co.nz/2016/02/'> February 2016 </option><option value='http://monkeycoder.co.nz/2015/12/'> December 2015 </option><option value='http://monkeycoder.co.nz/2015/11/'> November 2015 </option><option value='http://monkeycoder.co.nz/2015/10/'> October 2015 </option><option value='http://monkeycoder.co.nz/2015/09/'> September 2015 </option></select></div> </div><!-- .widget-area .first --><div class="col-sm-4 footer-widget" role="complementary"><div id="bbp_replies_widget-3" class="widget widget_display_replies"><h3 class="widgettitle">Recent Replies</h3><ul><li><a class="bbp-reply-topic-title" href="http://monkeycoder.co.nz/forums/topic/viva-mortis/#post-16179" title="what sort of collision issues are you having? Mig…">Viva Mortis</a></li><li><a class="bbp-reply-topic-title" href="http://monkeycoder.co.nz/forums/topic/viva-mortis/#post-16178" title="Played the first windows version. Everything seem…">Viva Mortis</a></li><li><a class="bbp-reply-topic-title" href="http://monkeycoder.co.nz/forums/topic/viva-mortis/#post-16177" title="YAY. Viva Mortis come second in the SyntaxBomb co…">Viva Mortis</a></li><li><a class="bbp-reply-topic-title" href="http://monkeycoder.co.nz/forums/topic/how-to-use-git-for-your-own-projects-modules-within-the-monkey2-repo/#post-16176" title="Thanks Danilo, very helpful!">How to use GIT for your own projects/modules within the monkey2 repo</a></li><li><a class="bbp-reply-topic-title" href="http://monkeycoder.co.nz/forums/topic/100-bounty-mx2-running-on-samsungs-linux-on-dex/#post-16175" title="Bounty still stands!">$100 Bounty: MX2 Running on Samsung's Linux on Dex</a></li></ul></div> </div><!-- .widget-area .second --><div class="col-sm-4 footer-widget" role="complementary"><div id="text-3" class="widget widget_text"><h3 class="widgettitle">What is this?</h3> <div class="textwidget"><p>Monkey2 is an easy to use, cross platform, games oriented programming language from Blitz Research.</p></div></div> </div><!-- .widget-area .third --></div></div></div><footer id="colophon" class="site-footer" role="contentinfo"><div class="site-info container"><div class="row"><nav id="menu-social" class="social-icons"><ul id="menu-social-items" class="social-menu"><li id="menu-item-12928" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-12928"><a href="https://www.facebook.com/BlitzResearchLtd"><i class="social_icon"><span>Blitz Research on Facebook</span></i></a></li></ul></nav> <nav role="navigation" class="col-md-6"><ul id="menu-social-menu" class="nav footer-nav clearfix"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-12928"><a href="https://www.facebook.com/BlitzResearchLtd">Blitz Research on Facebook</a></li></ul> </nav><div class="copyright col-md-6">2018 © Blitz Research Ltd. </div></div></div><!-- .site-info --><div class="scroll-to-top"><i class="fa fa-angle-up"></i></div><!-- .scroll-to-top --></footer><!-- #colophon --></div></div><!-- #page --><script type="text/javascript">jQuery(document).ready(function ($) {if ($(window).width() >= 767) {$('.navbar-nav > li.menu-item > a').click(function () {if ($(this).attr('target') !== '_blank') {window.location = $(this).attr('href')}})}})</script><script type='text/javascript' src='http://monkeycoder.co.nz/wp-content/plugins/bbpress/templates/default/js/editor.js?ver=2.5.14-6684'></script><script type='text/javascript'>/* <![CDATA[ */var themeMyLogin = {"action":"","errors":[]};/* ]]> */</script><script type='text/javascript' src='http://monkeycoder.co.nz/wp-content/plugins/theme-my-login/assets/scripts/theme-my-login.min.js?ver=7.0.13'></script><script type='text/javascript'>/* <![CDATA[ */var wp_ulike_params = {"ajax_url":"http:\/\/monkeycoder.co.nz\/wp-admin\/admin-ajax.php","notifications":"1"};/* ]]> */</script><script type='text/javascript' src='http://monkeycoder.co.nz/wp-content/plugins/wp-ulike/assets/js/wp-ulike.min.js?ver=3.6.0'></script><script type='text/javascript' src='http://monkeycoder.co.nz/wp-content/themes/sparkling/assets/js/vendor/flexslider.min.js?ver=20140222'></script><script type='text/javascript' src='http://monkeycoder.co.nz/wp-content/themes/sparkling/assets/js/flexslider-custom.js?ver=20140716'></script><script type='text/javascript' src='http://monkeycoder.co.nz/wp-content/themes/sparkling/assets/js/skip-link-focus-fix.min.js?ver=20140222'></script><script type='text/javascript' src='http://monkeycoder.co.nz/wp-includes/js/wp-embed.min.js?ver=5.1.1'></script></body></html>You can use Insert and Erase to insert and erase elements by index, Find to find the index of an element, Remove to an element by value etc.
October 2, 2017 at 9:15 am #10928Thanks Mark. That’s good advice.
In this case I actually changed it to a key map so that I have easy access to individual collection items via its key.
Monkey12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152Class ControlField Trigger:Bool()Field Callback:Void()Field Enabled:Bool = TrueEndClass ControlManagerField Controls := New Map<String,Control>Method Add ( key:String, trigger:Bool(), callback:Void() )Local control := New Control()control.Trigger = triggercontrol.Callback = callbackControls.Add( key, control )EndMethod Remove ( key:String )Controls.Remove( key )EndMethod Disable ( key:String )Controls.Get( key ).Enabled = FalseEndMethod Enable ( key:String )Controls.Get( key ).Enabled = TrueEndMethod DisableAll ()For Local key := Eachin Controls.KeysDisable( key )NextEndMethod EnableAll ()For Local key := Eachin Controls.KeysEnable( key )NextEndMethod OnUpdate ()For Local control := Eachin Controls.ValuesIf control.Enabled And control.Trigger()control.Callback()EndNextEndEndAlso, very nice that we have Lamda functions now. It’s really fun to use Monkey 2, now that I got more used to the syntax and strict types again.
October 2, 2017 at 10:36 am #10931- Is your Trigger() kind of CanExecute() equivalent?
- Inside of DisableAll / EnableAll you do double work – go through keys and then find by keys. But you can directly Eachin by values
Monkey12345Method DisableAll()For Local control := Eachin Controls.Valuescontrol.Enabled = FalseNextEndOctober 2, 2017 at 3:08 pm #10934From what I think, the “Enabled” field can be controlled by configuration, the trigger is actually where the input is updated.
Interesting bit of code, I will use it as well.
October 4, 2017 at 9:54 am #10975Hi,
thanks for the hint nerobot. I’m just doing the “double work” out of habit, so should I ever change the way I disable controllers I only need to change it in one place, i.e. in Method Disable. I think here the performance impact should be negligible.
And cocon, I just came up with this manager class to keep it as flexible as possible. In the setup I basically just create controls with a condition and a callback. I could add this stuff into the render loop but I prefer to have it packaged in this class not to “pollute” the render loop too much, and also to easily disable/enable controls later. That’s where the Lamda functions are really useful.
So in the main program this is how I’m using this class:
Monkey123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657#Import "utils/control_manager"Class MyApp Extends WindowField ControlManager:ControlManagerConst DegreesPerKeyDown := 1Const RadiansPerKeyDown := DegreesPerKeyDown * Pi / 180' ... more code hereMethod AddControls()ControlManager = New ControlManager()If Accel.Supported' Accelerometer controlsLocal unconditional := Lambda:Bool()Return TrueEndLocal rotatePlayerByAccelX := Lambda()Player.Rotation = -Accel.YEndControlManager.Add( "accelerometer", unconditional, rotatePlayerByAccelX )Else' Keyboard controlsLocal leftArrowDown := Lambda:Bool()Return Keyboard.KeyDown( Key.Left )EndLocal rightArrowDown := Lambda:Bool()Return Keyboard.KeyDown( Key.Right )EndLocal playerRotateLeft := Lambda()Player.Rotation -= RadiansPerKeyDownEndLocal playerRotateRight := Lambda()Player.Rotation += RadiansPerKeyDownEndControlManager.Add( "leftArrowDown", leftArrowDown, playerRotateLeft )ControlManager.Add( "rightArrowDown", rightArrowDown, playerRotateRight )EndEndMethod OnRender:Void( canvas:Canvas ) OverrideControlManager.OnUpdate()Player.OnUpdate()' ... more code hereEndEndI could later then just do something like
Monkey1ControlManager.Disable( "accelerometer" )<div id=”crayon-59d4ac7531a47621632511-36″ class=”crayon-line”></div>
-
AuthorPosts
You must be logged in to reply to this topic.