Mål-J | |
---|---|
Språkklass | multiparadigm : reflekterande orienterad , objektorienterad , funktionell , imperativ , scripting |
Framträdde i | 2008 |
Utvecklaren | 280 North Inc. |
Typ system | dynamisk , svag , anka |
Blivit påverkad | Objective-C , JavaScript |
Licens | LGPL |
Hemsida | cappuccino.org |
Objective-J är ett programmeringsspråk utvecklat som en del av Cappuccino , ett ramverk för webbapplikationer. Dess syntax är nästan identisk med den för Objective-C . Objective-J är för JavaScript vad Objective-C är för programmeringsspråket C: det är en strikt men kompakt superset. Objective-J lägger till traditionellt arv och Smalltalk/Objective-C-stil dynamisk sändning till JavaScript. Pure Javascript har redan konceptet med objektorientering och arv som ett prototypspråk, men Objective-J lägger till möjligheten att använda klassbaserad programmering till JavaScript.
Program skrivna i Objective-J kräver förbearbetning innan de kan köras av den virtuella JavaScript-maskinen i en webbläsare. Detta steg kan ske under körning i en webbläsare med hjälp av en kompilator som översätter Objective-J-program till ren JavaScript-kod. Objective-J-kompilatorn är skriven i JavaScript, så att distribuera Objective-J-program kräver inga speciella webbläsartillägg.
Den första fullskaliga användningen av Objective-J är associerad med skapandet av webbapplikationen 280Slides baserad på Cappuccino-ramverket. Även om Objective-J kan användas (och utvecklas) oberoende av Cappuccino, skapades Objective-J främst för att stödja Cappuccino-baserad webbutveckling.
Objective-J är en superset av JavaScript, vilket innebär att all giltig JavaScript-kod också är giltig Objective-J-kod. Följande exempel illustrerar en Objective-J-definition av en klass som heter Address. Denna klass utökar rotklassen CPObject, som spelar en roll som liknar den för NSObject i Objective-C. Med undantag för namnet på rotobjektet är denna kod också ett exempel på en klassdefinition i Objective-C.
@implementation Address : CPObject { CPString name ; CPString stad ; } - ( id ) initWithName: ( CPSstring ) aName stad: ( CPString ) aCity { self = [ super init ]; namn = ett Namn ; stad = aCity ; återvända själv ; } - ( void ) setName: ( CPString ) aName { name = aName ; } - ( CPString ) namn { retur namn ; } + ( id ) newAddressWithName: ( CPString ) aName city: ( CPString ) aCity { return [[ self alloc ] initWithName : aname city : aCity ]; } @slutetPrecis som med Objective-C börjar definitioner av klassmetoder och instansmetoder med '+' (plus) respektive '-' (minus).
Till skillnad från Objective-C behöver objekt i Objective-J inte frigöras, eftersom de automatiskt frigörs av JavaScript-sopsamlaren.