J♯

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken

J# (uitgesproken als J sharp) is Microsofts implementatie van Suns Java. J# is in feite een kopie van Java, zodat het voor Java programmeurs eenvoudig is hun bestaande Java applicaties over te zetten naar het .NET framework. Het sterke van J# is dat het zowel met Java bytecode (door de compiler gegenereerde code die wordt uitgevoerd door een virtuele machine) als met Java broncode zelf overweg kan. Dit eerste is een groot voordeel als de originele broncode niet (meer) beschikbaar is.

In het algemeen wordt gezegd dat J# niet van hetzelfde niveau is als bijvoorbeeld C# of VB.NET, mede omdat er voor J# veel minder voorbeelden, tutorials, bronnen en updates beschikbaar zijn. Toch is ook J# gewoon een onderdeel van het .NET framework, en heeft het toegang tot alle functionaliteit die in de CLR (Common Language Runtime) geboden wordt. Als er alleen maar java bytecode hoeft worden gedraaid, dan is IKVM.NET, een Java framework dat bovenop het .NET framework draait, een goed alternatief.

Verschillen tussen J# en Java[bewerken]

In het algemeen is de syntaxis hetzelfde, maar er zijn in J# bepaalde aanpassingen gedaan om de functionaliteit van .NET te ondersteunen. Standaard ondersteunt Java geen property's, en om toch deze functionaliteit te bieden moeten getters en setters in J# aan bepaalde voorwaarden voldoen.

Voorbeeld van een klasse met een setter en een getter:

 public class property
 {
    private String naam;
 
    /** @property
    */
    public void set_Naam(String naam)
    {
       this.naam = naam;
    }
 
    /** @property
    */
    public String get_Naam()
    {
       return this.naam;
    }
 }

Zoals hierboven moet een property voorzien zijn van het sleutelwoord property in Javadoc stijl, dus met een @ ervoor. Verder moeten de functies beginnen met get_ en set_, en moet de variabele naam zoals die gebruikt wordt in de functie verschillen met de variabele naam zoals die binnen de klasse gedefinieerd is. De namen van de functies die bij dezelfde property horen moeten hetzelfde zijn om lees- en schrijf functionaliteit te verkrijgen, maar om een property bijvoorbeeld alleen-lezen te maken kan de setter natuurlijk gewoon weggelaten worden.

Een aantal verschillen met java zijn dat J# niet compileert naar Java bytecode, dat het ontwikkelen van Java-applets niet wordt ondersteund, en ook niet de mogelijkheid om Java applets te hosten in een browser. Als laatste worden de Java Native Interface en de Raw Native Interface vervangen door P/Invoke, en wordt het gebruik van Remote Method Invocation niet ondersteund.

Voorbeelden[bewerken]

Indien een priemgetal, geef de delers weer:

private void button1_Click(Object sender, System.EventArgs e)
{
	// Declaraties
	boolean priem = true;
      String strGetal, delers = "";
      double dblGetal, rest ;
      int deler = 2;
 
      // Inlezen van tekstbox
      textBox1.SelectAll();
      strGetal = textBox1.get_SelectedText();
      dblGetal = System.Convert.ToDouble(strGetal);
 
	// Werkwijze :
	// we delen het getal door een deler.
	// Indien de rest van deze deling 0 is, hebben we niet te
	// maken met een priemgetal en onthouden we de deler.
	// We voeren dit uit voor delers gaande van 2 tot de helft
	// van het deeltal.
	// indien we op het einde nog steeds geen rest = 0 hebben
	// gevonden, is het een priemgetal
      while (deler <= dblGetal / 2)
      {
      	rest = dblGetal % deler;
            if (rest == 0)
            {
            	priem = false;
                  delers += System.Convert.ToString(deler) + ", ";
            }
            deler++;
 	}
 
      if (priem)
      {
            label2.set_Visible(false);
            label3.set_Visible(true);
            label4.set_Visible(true);
            delers = "De delers zijn 1, " + strGetal;
            label4.set_Text(delers);
      }
      else
      {
            label2.set_Visible(true);
            label3.set_Visible(true);
            label4.set_Visible(true);
            delers = "De delers zijn 1, " + delers + strGetal;
      	label4.set_Text(delers);
      }
  }